Session du 10 avril 2025 à 21h00
Programmation Orientée Objet (POO)
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Comprendre les bases de la POO en Python
Introduction pratique à la programmation orientée objet en Python, avec des exemples simples de classes, attributs et constructeurs pour bien démarrer.
00:00:00 :Et voilà, comme je disais, ça va être une session plus orientée débutante, mais d'ailleurs,ça va être de la PO et de revoir les bases parce qu'on a des nouveaux qui ont commencéil y a pas longtemps le TOSA, donc ça peut être sympa de revoir les bases. Donc il y
00:00:25 :a Rawox, Edward déjà. Mehdi, je ne sais pas à quel point tu es fort en PO actuellement.Je dirais moyen. Moyen, ok. Raclissier, Arcel, normalement c'est bon et Baptiste aussi. Ah,
00:00:39 :Rawox il a planté, il est revenu. Donc, on va commencer par les bases du coup. On vacommencer par Rawox. Donc en PO, après vous m'arrêtez de faire mesure. Donc ça, hop
00:01:00 :là. Par exemple Rawox, Edward, Mehdi, vous m'arrêtez s'il y a un doute ou même lesautres, mais vous m'arrêtez s'il y a une interrogation. Alors je vais enlever Copilot
00:01:10 :parce qu'il va te faire un plat, même quand je code, ça me saoule des fois. Hop là,il me met des trucs bizarres. Est-ce que, hop là, c'est bon. Donc je disais, c'est
00:01:20 :bon. Donc je disais, on va vraiment prendre les bases. Donc on va partir sur une classe,on va prendre une classe en mode jeu de rôle. Ou on pourrait commencer par une classe basique.
00:01:37 :Comme dans les formations, je pense que c'est beau, c'est ça que je disais, les classesde voiture. Par exemple, si je prends une classe là, je vais définir un attribut,
00:01:47 :donc roux. Hop là, roux. Égal 4. Donc pour instancer une classe, il n'y a pas de problème.Vous me dites si il y a... On est d'accord que là, j'ai instancé la classe. Je ne vois
00:02:00 :pas ton écran par contre. Moi non plus, c'est ce que j'étais en train de me dire. Moi nonplus. Je relance. Ok, relance. Je vais zoomer en même temps, va. Est-ce que là ça revient
00:02:16 :ou ça ne revient pas ? Oui, impeccable, merci. Ok, super. Du coup, je disais, les classes,j'ai des exemples plus sympas, mais là, vraiment basiquement. Pour ceux qui ne sont pas encore
00:02:32 :très opé avec la PO, l'instancation, ça va pour vous ou pas ? Oui. Ok. Ça veut direque là, je peux très bien faire z.roux. On est d'accord que là, je peux faire ça,
00:02:50 :ça va me printer 4. On est d'accord ? Oui. Ok. Maintenant, si je fais autant d'instancesque je veux, mais là, j'ai pris un attribut de classe. Maintenant, si je passe sur un
00:03:03 :constructeur, on va mettre, c'est le premier argument, et on va mettre, je ne sais pas,couleur. On va mettre couleur, et celle sans couleur sera égale à couleur. Est-ce que
00:03:23 :ça c'est bon du coup ? Je crois que oui. Alors ok, il y a un doute là. Donc là,voilà, c'est ça que je voulais voir. À partir de où ça bloquait ? Donc là, en fait,
00:03:36 :on est dans un constructeur de classe. Ça veut dire qu'en fait, quand on va créer une instance,maintenant, ici, dans le constructeur, on va devoir passer une couleur. La couleur,
00:03:49 :imaginons, ça va être le c, ça veut dire qu'on fait référence à l'instance. Donc,si je mets, je ne sais pas, rouge, voilà, on va appeler une voiture V2, on va prendre voiture,oupla, voiture noire, voilà. Donc si je fais maintenant V.roux, on va le laisser.
00:04:11 :Print V, c'est deux, .roux, voilà. Donc là, ils vont tous les deux afficher quatre,parce qu'ici .roux, ça va faire référence ici à la classe. Donc tout ce qui est ici,
00:04:26 :attribut de classe, va être partagé par toutes les instances. Maintenant, si je fais un V,c'est couleur, j'ai mis V.couleur, et que je fais un print de V2.couleur, je vais se deviner,
00:04:46 :on a maintenant rouge et noir. Parce que ici, V, je l'ai instancié avec la couleur rouge,qui est ici dans le constructeur init, donc qui va être propre à l'instance, qui est là,et V2 sera de couleur noire, donc ça sera sa couleur, en fait, à cette instance-là.
00:05:09 :Est-ce que ça va ou pas ?Oui.Ok.Oui.Donc là, on a vraiment l'attribut de classe qui va être partagé par toutes les instances,je peux créer un V3, un V4, un V5 si on veut, cet attribut-là sera partagé par tout le monde.
00:05:27 :Mais ici, l'attribut couleur sera vraiment propre à chaque instance, si je définis en noir, en rouge,en blanc, ce qu'on veut. Donc si ça va pour l'instant, tant mieux.
00:05:38 :On va prendre des choses un peu plus complexes sans abuser non plus.Par contre, je ne vois pas le chat, je ne sais pas s'il y a des questions dedans.
00:05:48 :S'il y a des questions, vous me stoppez, il n'y a pas de...Hop là.Donc par exemple, si je prends une classe, on va parler un peu d'héritage et tout,une classe Personnages.
00:06:01 :Donc vous allez voir que les attributs, ce n'est pas justement des choses que des types,genre des chaînes de caractères.Personnages, on peut avoir ici en race, c'est pas un humain.
00:06:15 :On peut avoir un elf.Donc là ici, je suis sur un attribut de classe.Mais ce que je voudrais moi, c'est définir quand je vais instancier mon personnage,et pouvoir dire, on fait toujours référence à l'instance,le self, ça ne vous pose pas peur, c'est bon ?
00:06:37 :Non, ça va.Ok.Donc, c'est à dire que maintenant, on va pouvoir dire à un personnage,on veut qu'il ait un nom, et puis une race par exemple.
00:06:48 :On pourrait faire comme ça.Et un niveau.Voilà.Hop là.Je pensais à quoi aussi ?Ouais, on va le laisser comme ça.Pour l'instant, on va pas trop s'occuper de l'attribut qu'il a.
00:07:03 :Voilà.Donc, un niveau.Et on pourrait même dire qu'on a un niveau par défaut, si on ne spécifie pas,on a un niveau à 1.
00:07:11 :Ça c'est possible.Donc ce que je fais, c'est que le nom est égal à nom,le self.race est égal à race,et self.niveau est égal à niveau.
00:07:32 :Voilà.Et ce qu'on peut faire en plus, c'est on va dire que si notre attribut classe,on va en créer un nouveau,nombre d'instances est égal à 0.
00:07:45 :Quand on crée une instance, du coup, on pourrait très bien dire,nombre instance,excusez-moi,personnage.nombreinstanceplus, égale,j'arrive, hop là.Hop.Voilà.Donc, je vais continuer la bêtement.
00:08:09 :Du coup, ce que je fais, c'est que par exemple, imaginez si j'ai ici,je sais pas, mon personnage Boromi,qui est égal àpersonnage,donc son nom, ça va êtreBoromir,sa race, lui c'est un humain,et on spécifie pas le niveau parce qu'on a mis un niveau par défaut.
00:08:32 :Voilà.Et donc là, si je fais printBoromir, tac,point nom,mince,point nom,donc là ici, j'ai bien Boromir.On pourrait regarder, si on fait maintenant,si on fait un print depersonnage, point,ses noms d'instances,il y a ici une instance, du coup.
00:09:05 :Puisque ce qu'on fait quand on va créer une instance, en fait, ici,on crée l'instance,dans le constructeur, on va venir incrémenterl'attribut de classe.
00:09:15 :Est-ce que pour l'instant, c'est bon ou pas ?Ouais.Je vois la ligne où tu l'incrémentes.Ouais.Mais par contre, je comprends pas comment il sait que c'est une instance.
00:09:27 :Parce que, à partir du moment ici, où tu vas appeler ta classe,et que tu vas, comme ça, ici, entre guillemets, avec les parenthèses,l'instancier,en fait, automatiquement, la méthode init est appelée toute seule.
00:09:40 :Elle est appelée d'office.Elle est appelée d'office.Même en arrière-plan, tu as des méthodes comme la méthode new qui est appelée,qui est avant init, mais ça, franchement, pour les bases, je t'en fiche.
00:09:50 :Dis-toi juste que quand tu instancies une classe,cette méthode-là est automatiquement appelée.Parce que si j'oublie, par exemple, de mettre le nom ou la race,Hop là.
00:10:03 :Vu qu'elle est appelée et qu'elle attend d'avoir le nom ou la race,ça va te mettre une erreur.Voilà, ça me plante.OK.OK.Ça, ça montre bien que celle-là est automatiquement appelée.
00:10:16 :Vu qu'elle est appelée, si ici j'incrémente, forcément, ça va être incrémenté.Ouais, OK.OK ?Du coup, j'aurais pu mettre...Allez, on va se mettre une petite condition qui peut être marrante.
00:10:34 :Ici, par exemple, pour la race, on va faire...On va voir qu'on peut faire des...Comment dire ?S'amuser un peu avec les attributs comme ça.
00:10:42 :Ici, on pourrait très bien dire race if, race in, race is.Non.C'est self.Un truc d'instance.Un truc d'instance.Personnage, point, race is.Et elles, on pourrait mettre inconnue.
00:11:01 :Donc là, en gros, ici, mon attribut que je définis,là, par exemple, si je mets en race et si je ne mets rien,ici, il va aller vérifier si c'est dedans, dans la liste,ce que j'ai mis ici.
00:11:17 :Sinon, ça va mettre inconnue.Ça, c'est juste pour le fun.Voilà.On peut mettre un petit peu de logique, si on veut, dans l'attribut.Donc là, dès que ça instantie, il va me prendre ce que j'ai défini,la race, il va me le prendre.
00:11:37 :Si c'est dans l'attribut de classe, sinon il me met inconnue.Et vu que je n'ai mis rien et que ce n'est pas dedans,ça me met inconnue.
00:11:45 :Ça, c'était juste pour le fun.Ça, ça va ou pas ?Ouais.Voilà.C'était juste pour avoir un peu de logique.Hop là.Ça, vu que ça y est, il va le reconnaître direct.
00:11:57 :Hop là.Donc, normalement, si je le relance, là, il marche.C'est bon.Donc, voilà.Et on va constituer la méthode quoi ?Alors, à savoir aussi, je ne vais pas vous le montrer,ça peut être un peu perturbant, mais on va le faire.
00:12:16 :On pourrait très bien dire Boromir.Bon, allez, on va faire ça.Boromir.Il faut savoir qu'en fait, un attribut de classe ici,il est accessible depuis une instance.
00:12:38 :C'est-à-dire que depuis l'instance que j'ai créée,j'ai accès ici à cet attribut de classe.Est-ce que ça va ?Et dans quel cas ça pourrait être utile, ça ?
00:12:50 :Comme ça, franchement, j'ai envie de dire que pour moi,je n'ai pas encore vu de cas où c'était utile.Je préfère dire que c'est plutôt à éviter.
00:13:02 :Ok.Je pense.Je n'ai pas vu de cas.Moi, quand j'ai appelé un attribut d'instance de classe,je passais vraiment par la classe.Donc, c'était juste pour savoir quoi.
00:13:12 :Mais bon, pour l'instant, ce n'est pas le plus important.À l'inverse, si je fais au moins juste pour montrer ça,si je fais personnage.nom, ça ne marche pas.
00:13:28 :Donc, j'ai accès à l'attribut de classe depuis une instance,mais je n'ai pas accès aux attributs d'instance depuis la classe.Ok ?Oui.Ok.Voilà.
00:13:44 :Ça, ce n'était pas la meilleure chose à montrer,mais je préfère en parler rapidement.C'est des trucs défauts qu'on peut découvrir comme ça.Du coup.
00:13:55 :Donc, oui.Là, par exemple, il faut savoir qu'on peut aussi définir des attributs,par exemple, d'instance.On va dire instance.À la volée.Donc là, si je fais bourromire.force est égal à 1.
00:14:13 :On va très bien faire un bourromire.force.C'est égal à 1.On peut très bien définir des attributs à la volée.Et ça, pareil, est-ce que ce n'est pas un peu...
00:14:29 :Est-ce que des attributs à la volée comme ça,il n'y a pas des risques qu'on mélange tout après ?On s'y perde.Je pense que si.
00:14:37 :Moi, perso, après, je bosse beaucoup sur framework.Alors, je n'ai jamais eu à définir à la volée comme ça.Ça ne m'est jamais arrivé.Au niveau pro, en tout cas.
00:14:48 :C'est intéressant de voir s'il y a des cas où vraiment c'est utilisé,mais là, comme ça, je n'en ai pas.Après, perso, je n'ai jamais eu à le faireet je ne préférerais pas avoir à le faire,définir un attribut à la volée comme ça.
00:14:59 :Ouais.Tu peux...Comment ça s'appelle ?Je ne sais plus.Il y a une variable qui te...J'ai oublié le nom.En fait, qui t'empêche de définir à la volée comme ça.
00:15:13 :Parce que souvent, dans les frameworks, comme ça, c'est défini.Attends, je recherche le nom.Je recherche le nom.Mince.Alors.Hop là.S'il le retrouve.
00:15:36 :Alors.Ça doit être ça.Voilà.Donc, par exemple, si je suis ici dans ma classe.Ce n'est pas slots.Je crois que c'est slots.On va essayer.
00:15:52 :On va, par exemple, dire...Nous, on a quoi comme attribut ?On a nom, race et niveau.Nom.Race et niveau.Alors, ça, ça se voit dans les frameworks.
00:16:07 :Je l'ai vu dans le code source que ça existe, le slots.On va le mettre à part.Et normalement, si je fais bourgmire.force, là.Voilà.
00:16:17 :Je n'ai pas le droit de le faire.D'accord.Là, je définis la liste des attributs dont j'ai le droit, entre guillemets.D'accord.Voilà.Donc, oui.
00:16:31 :Ça, ça incite vraiment.De toute façon, si jamais il y avait ça, ça, ça serait impossible à faire.Voilà.Ça, il faut se le dire.
00:16:38 :Donc, pour l'exemple, on oublie.Et puis, à la limite, on peut se le laisser, du coup.On peut se le laisser.On va rester comme ça avec nos attributs qu'on a définis.
00:16:52 :Après, je voulais partir sur le mapping.Est-ce qu'on pourrait ?On peut partir là-dessus.Si vous voulez voir ce qui est disponible comme attribut, on pourrait faire un bourgmire.
00:17:05 :Alors, c'est dicte, je crois.C'est ce qu'on appelle le mapping proxy.Donc là, ce qu'il y a.Qu'est-ce que j'ai fait ?Ça, on l'a déjà vu.
00:17:27 :Qu'est-ce qui me dit ?Qu'est-ce que j'ai fait ?Alors...Là, du coup, dicte, c'est un attribut ou c'est une méthode ?Normalement, je peux l'appeler en...
00:17:50 :De toute façon, c'est en méthode.Voilà, c'est bon.OK.Alors, je vais relancer parce que c'est bazar.Voilà.OK.Donc là, c'est ce qu'on appelle le mapping proxy.
00:18:08 :Ça permet de voir un peu ce qui est disponible dans la classe.Ça peut être pratique pour voir ce qui est disponible au niveau de votre classe.
00:18:25 :Je cherche un truc.Je ne sais pas si j'ai mon exemple.Donc, oui.On voit très bien, par exemple, qu'il va nous sortir ce qu'il y a dedans.
00:18:36 :Par exemple, il va dire race, humain, elfe.Il est où, là ?On a le nombre d'instances.On a le init.On a le slot.
00:18:47 :Et comme ça, vous pouvez inspecter un peu tout ce qu'il y a.Mais ce qui m'embête, c'est que je...Normalement, on peut l'appeler...Qu'est-ce que j'ai fait ?
00:18:56 :J'ai fait une...Ah !Est-ce que le slot m'empêche pas de le faire ?Ça me paraît très bizarre.Là, je le fais.Alors que le slot peut l'empêcher de le faire.
00:19:12 :J'ai appris une chose.OK.OK, OK.Donc, là, j'ai mon attribut dic.Ici, l'attribut magique.Et il me sort que j'ai disponible au niveau de mon...
00:19:28 :Enfin, de mon instance disponible.Il va sortir ici mes attributs d'instance, on va dire.Par contre, il met pas tous les attributs de classe auxquels on peut accéder depuis l'instance.
00:19:38 :Ça va ou pas ?Ouais, alors comme je t'avais dit, moi, j'ai un peu de mal avec les termes.OK.En fait, je confonds attributs de classe et attributs d'instance.
00:19:51 :OK.Mais je pense qu'il faut que je revoie les vidéos, je pense.OK, donc on va oublier ça.En fait, en gros, vraiment, là, l'exemple, il est tout bête ici.
00:20:02 :Tout ce qui est attribut de classe, c'est tout ce qui est là.OK ?Ouais.C'est défini directement au niveau de la classe.Tout ce qui est attribut d'instance, c'est défini ici dans le constructeur.
00:20:13 :OK, d'accord.OK ?Ouais.Tout ce qui est en constructeur, c'est attribut d'instance.Même ce que je fais ici, en fait, c'est que je fais pas un attribut,c'est que je vais aller incrémenter l'attribut de la classe ici.
00:20:26 :J'ai pas créé un attribut, je vais juste incrémenter celui-là.Ouais.Instance et classe, OK ?OK.Voilà.Donc, je voulais continuer un petit peu sur les méthodes, du coup.
00:20:40 :Et donc, vous avez...On va se mettre là.On va l'appeler...Comment ?Def...Par exemple, ici, on a aussi, du coup, des méthodes d'instance.
00:20:54 :Quand on a le self, en fait, c'est que c'est vraiment une méthode d'instance.C'est que la classe, elle peut pas y accéder.Donc, par exemple, ici, je vais faire...
00:21:03 :On va faire une string.Et on va dire...Je suis un...Hop.Et c'est le point...Voilà, ici.Et on peut dire...Mon nom est...
00:21:17 :Et mon nom est...Hop.Hop là.Point.Bon.Voilà.Et donc, maintenant, si je fais...Hop là.Et je trouve que je l'appelle, bien sûr.
00:21:33 :C'est une méthode.Hop là.Et donc, là, ici, je suis un humain et mon nom est Boromir.En fait, vu que c'est une méthode d'instance,j'ai accès aux attributs d'instance par le self.
00:21:49 :OK ?OK.Là, je pourrais pas dire...Non, c'est pas un bon exemple, mais...On pourrait toujours avoir accès à la classe,mais on n'a plus la classe elle-même.
00:22:03 :Là, vraiment, ici, dans les arguments,on a vraiment l'instance elle-même.Donc, si je crée un nouveau personnage qui s'appelle...Je sais pas...Allez, un gorgon.
00:22:17 :Je suis inspiré.Tac.Tac.On va l'appeler.Tac.Un...Gorgon.Gorgon.OK.Et lui, il est aussi humain.Donc, là, c'est pareil.Si je fais un print,c'est vraiment propre à l'instance.
00:22:42 :Si je fais un print,il y en a un, c'est Boromir, l'autre, c'est un gorgon.C'est vraiment propre à l'instance.OK.Voilà.Là, où on peut...
00:22:55 :Est-ce que je vais le faire comme ça ?Ouais.On va faire un exemple presque, entre guillemets,presque inutile en termes de programmation,mais qui est parlant.
00:23:05 :On peut utiliser le decorator class method.Donc, là, on a une méthode d'instance.Donc, je reviens.Attribut de classe,attribut d'instance propre à l'instance qu'on crée à chaque fois ici.
00:23:17 :Et ici, on va créer une méthode qui est propre, par contre,à la classe elle-même.On pourrait dire, def,on va mettre le nombre de personnageset, en argument, on va mettre la classe elle-même.
00:23:36 :C'est noté comme ça, classe.Ça, c'est la commande qu'on verrait partout, c'est classe.Et donc...Là, en fait, le nombre perso, du coup,si tu crées une autre classe,ça va être celle de la classe personnage,pas celle de l'autre classe.
00:23:56 :Alors, attends, répète ta question.Ouais, je m'exprime peut-être mal.Là, vu que tu as mis le decorator class method,là, du coup, ta méthode,elle va être propre à la classe personnage.
00:24:11 :Ouais, c'est ça.Voilà.Donc là, par exemple...Si tu crées une autre classe, du coup,nombre perso, elle ne le sera pas.Si je crée une autre classe...
00:24:22 :Attends, j'ai du mal à comprendre ce que tu voulais me dire.Si tu crées, par exemple, une classe personnage 2...Ah oui !Non, non, oui, non, là, ce que je fais...
00:24:33 :Alors, après, tout dépend s'il y a de l'héritage,mais là, non, vraiment, on reste pour l'instant dans la classe.Ouais, ok.En gros, je vois class method ici.
00:24:44 :C'est que ce n'est pas fait pour, entre guillemets, utiliser...Voilà, c'est le bon terme, je pense.Utiliser les attributs d'instance.C'est vraiment fait pour utiliser la classe elle-même.
00:24:54 :Donc, par exemple, vu que c'est...Tu prends ici en argument la classe.On peut très bien faire classe, point,nombre d'instances.Ok, ouais, je vois, ouais, ok.
00:25:09 :Je peux faire maintenant un print personnage, point...Ça ne marchera pas, ça.Point, nombre d'instances.Et là, j'ai créé deux instances en créant.On va supprimer l'identité, on s'en fiche.
00:25:24 :On va juste garder les instances.J'ai fait une autre, nombre...Non, c'est pas nombre, c'est nombre perso.Nombre perso, voilà.Nombre d'instance, c'était le nom de ma méthode, voilà, c'est ça.
00:25:39 :Hop là.Et donc, là, ici, je définis bien deux.Parce qu'ici, ma classe, ma méthode nombre perso,ma méthode de classe, elle accède à la classe,et donc à l'attribut de la classe.
00:25:55 :Ok, d'accord, ouais, je vois.Donc, il y a vraiment, en fait, une grosse idée.La chose vraiment à différencier comme ça en PO, c'est...Tout ce qu'il y a à créer au niveau de la classe,et tout ce qu'il y a à créer au niveau des instances,dans le constructeur init.
00:26:11 :Ok, ouais, ok.Ça va aller, ça, ou pas ?Ouais, ouais, ouais.Ok.J'ai vu un...Est-ce que tu veux dire un truc ?Ouais, j'ai deux petites questions.
00:26:33 :Le paramètre CLS, c'est par convention que tu l'appelles CLS ?Ça aurait pu très bien être classe, par exemple.Ouais, alors attends, je vais te dire...
00:26:43 :Dans la classe méthode.Alors, attends, je vais accepter quelqu'un...Par exemple, ça pourrait être...On est où, là, tac.Ouais.Je sais pas.Donc, du coup, si jamais tu fais ça, là,ça marche quand même.
00:27:01 :Ok ?Ok, merci.Je t'ai mis ce que je voulais, tu vois, à l'arrache,mais juste pour te montrer.Oui, ça reste un paramètre normal, quoi.
00:27:11 :Ouais, de toute façon, quand tu...Je pense que VS Code pourra te le dire, je pense.Est-ce qu'il me dira si je fais ça ?
00:27:21 :Ouais, lui, il comprend.JKL, type, ça va être le personnage, ok ?Ok.J'aime bien, moi, les vidéos pour ça.Des fois, il faut explorer un peu ce qu'ils nous mettent.
00:27:37 :Donc, voilà.J'ai printé ça, ok.J'avais une deuxième petite question.Sur ta méthode de classe,c'est quoi le plus intéressant ?Est-ce que c'est de créer une méthode de classe comme çaqui permet de comptabiliser le nombre d'instances ?
00:27:58 :Ou alors, si tu te contentes de ton attribut de classenombre instances, est-ce que ça peut suffire ?Oui, non, là, j'ai fait ça vraiment pour montrerque j'accède vraiment à un attribut de classe.
00:28:10 :Mais ça pourrait être intéressant, une méthode de classe,je sais pas, par exemple...Là, ça suffirait d'appeler l'instance elle-même.C'était juste pour l'exemple, mais par exemple,moi, les méthodes de classe, je m'en sers.
00:28:22 :Les dernières fois où j'en suis servi,c'était dans des classes sur Django.J'avais créé un espèce de...J'ai l'impression que c'est souvent utilisé comme ça.
00:28:36 :En fait, je m'en sers à créer des...Comment dire ?Des moules, en fait, pour mes instances.Donc, par exemple, ici, je mettrais un humain.
00:28:47 :Donc, j'accède à la classe.Et je vais mettre, par exemple, en race, ici.Voilà.Et je vais retourner ma classe avec le nom...Alors, non, je vais pas faire ça.
00:29:05 :Je vais mettre le nom à la place.Donc, le nom.On avait quoi dans la classe ?On avait le nom et la race.Le niveau, il est par défaut.
00:29:13 :Et en race, je vais avoir, du coup, par défaut, humain.Donc, quand on instancie une classe,là, depuis tout à l'heure, on fait...Donc, je vais l'appeler humain.
00:29:23 :On utilise personnage.OK.Donc, ça revient même, du coup, quand on est dans une méthode.Elle est où ? Elle est là.C'est chiant, tous ces messages.
00:29:33 :Ici, c'est comme si on faisait personnage.Donc, par exemple, si je fais personnage,et je vais peut-être le retourner, ça sera mieux.Hop là.Sinon, ça marchera pas.
00:29:45 :Tac, là.Et si je fais, par exemple, humain,elle va être égale au personnage.Créer humain, voilà.Et on va mettre le nom, je sais pas, ça va être...
00:29:59 :Paradoxe.Et maintenant, si je fais...Ah, il y a quelqu'un qui arrive dans le chat.Tac.C'est là.Hop, c'est bon.Et donc, je dis quoi ?
00:30:14 :Si je fais humain, point, on avait dit quoi ?On avait nom.Hop.Et humain.Point.Passe.Et j'aurais dû faire un print.Hop.Et ici, on va faire un print.
00:30:32 :Donc, voilà.Passe.Je le vois plus.Donc, maintenant, si je fais ça ici,je deviens un hoax qui est un humain.En gros, ce qui se passe quand je fais ça,c'est que je vais retourner ici, je passe par la classe,sauf que je vais avoir un moule un peu prédéfini.
00:30:51 :C'est que je vais accepter de passer un nom,le nom qu'on veut, comme je fais là.Par contre, en race,dans le init, par exemple,en race, ici,j'ai mis par défaut humain, et ça sera toujours humain.
00:31:10 :Donc, ça me permet d'avoir une méthode de constructionde ma classe un peu alternative.Ça peut servir à ça aussi, une classe de méthode.Est-ce que ça va ou pas ?
00:31:18 :Oui, ça va.Là, ici, c'est comme si, en gros,on avait personnage.Merde.C'est autre chose.Là, c'est comme si on avait personnage, en fait.
00:31:31 :Sauf que, on passe, du coup,c'est une méthode de classe,donc on utilise la classe elle-même.Donc, ça, ça vaut personnage, en fait.Donc, voilà.
00:31:40 :Après, vous avez ce qu'on appelle...Alors, ça, c'est une grande question.On va prendre un exemple qui soit parlant.Les méthodes statiques.Une méthode statique,c'est une classe.
00:31:58 :On va en garder qu'un.On va alléger un peu le code.On enlève ça.Une méthode statique,elle a accès, cette fois,ni à la classe,ni à l'instance.
00:32:14 :Je ne vais pas l'expliquer, celle-là.J'ai toujours un peu de...Parce que je n'aime pas les méthodes statiques, forcément.Je ne suis pas un grand fan.
00:32:19 :En gros, quand je dis méthode statique,je préfère faire une fonction générale.Par exemple,on est dans le thème, ici,des personnages un peu du jeu de rôle.
00:32:26 :On pourrait dire,on aimerait bien avoir un générateur de noms.Donc, on se fait un générateur de noms.Ici, je ne passe ni la classe,ni l'instance,puisque les méthodes statiquesn'ont accès à aucun des deux.
00:32:42 :Ça va, pour l'instant ?Ouais.Donc, je pourrais très bien dire...Je fais un import local.C'est un peu sale, je le sais,mais c'est pour l'exemple.
00:32:51 :On pourrait très bien dire une liste de noms.Je ne sais pas.On va voir quoi.On va repartir.C'est quoi ? C'est du prodon.
00:33:02 :Et on va mettre...Allez, ça va mieux, cette fois.Et donc, là, ce qu'on va retourner...On va faire un random.Situated ou chose, je ne sais jamais.
00:33:13 :Situated, du coup, c'est sur aucun.Ouais.Ouais, c'est ça, je pense.Bon, oui, forcément.Donc là, par exemple,la méthode statique, ici,elle est là pour me générer, en fait,un nom hasard.
00:33:25 :Donc, si je fais, par exemple,personnage.générateur de nom,donc à chaque fois,elle va me choisir un hasard.Alors, prodon, faramir, faramir, faramir,ainsi de suite.
00:33:42 :Et en fait, une méthode statique, du coup,elle n'accède donc ni à la classe,ni à l'instance.Et on pourrait très bien se dire,est-ce que ça ne serait pas plus utiled'avoir une fonction à part pour çaet qu'on l'enlève de la classe, quoi ?
00:33:57 :Je ne sais pas si vous voyez ce qu'il veut dire.Ou est-ce que c'est un peu compliqué ?Ouais, enfin, oui, pourquoi...Oui, effectivement, je te rejoins.
00:34:08 :Pourquoi ne pas avoir une fonction à part ?C'est ça.En gros, j'en ai déjà utilisé,qui était quand même très proche de la classe.
00:34:16 :Donc je me suis dit,ouais, c'est bien de l'avoir en classe.Sur un projet, ça m'est déjà arrivé.Mais en général, quand j'ai une méthode statique,moi, ce que je fais,c'est que j'aime bien aller me créer iciun module à part, comme ça, utile.
00:34:29 :Je vais prendre ici ma méthodequi sera une fonction.Je préfère faire ça.C'est à part.Je n'ai pas fait d'erreur.Bon, peu importe, on pourra le faire au-dessus.
00:34:50 :C'est un peu ça, je suis d'accord.Dégager ça, hop,et me faire, genre,from utile import,et je l'ai appelé comment, déjà ?Générateur de noms, tac.
00:35:07 :Et je préfère aller me faire ça, en fait, comme ça,un générateur de noms,l'importer quand j'en ai besoin.Et ça ne marche pas, pourquoi ?
00:35:16 :Ah, c'est normal, c'est ça qui plante, forcément.Puisque j'en ai un module statique, voilà.Et voilà, j'ai mon générateur de noms qui est à part,dans une fonction, bien à part, dans un module.
00:35:28 :Voilà.En général, je fais ça.C'est bon, toi ?Ouais, je ne suis pas sûr.Enfin, en fait, les méthodes statiques, du coup,elles n'ont pas trop d'intérêt, alors, du coup.
00:35:41 :Aussi, parfois, c'est dommage, là, je n'ai pas un exemple.En fait, là, j'ai trouvé un exemple,mais en fait, il était beaucoup mieux en méthode d'instance.
00:35:50 :C'est pour ça, en fait, c'est marrant d'écrire une méthode statique,genre, je ne sais plus, j'avais quoi, j'avais...Allez, je vais essayer de la reproduire.
00:35:57 :Je me suis dit, ah, je vais montrer, c'est un bon exemple.Je me suis dit, def...Oh, je ne sais plus comment je l'avais appelé.
00:36:03 :Bref, validate level.Et j'avais mis ici, comme ça, level.Et je me suis dit, comme ça, on peut faire return...Level, c'est pour vérifier, genre, si le niveau...
00:36:18 :Alors, voilà, non.Je me suis dit, je ne voulais pas que le niveau soit supérieur à 20ou à 19, peu importe.Enfin, je n'ai pas mis le égal, mais je le comprends.
00:36:25 :Donc, on pourrait inférieur ou égal.On veut que le niveau soit forcément inférieur ou égal à 20.Ouais.Et donc, je me suis dit, ouais, ça peut être intéressant.
00:36:34 :Donc, là, j'ai Boromir, ici.Il n'est qu'à niveau 1, parce qu'on ne l'a pas défini,donc il est par défaut.Et donc, on peut très bien se dire...
00:36:43 :Bon, allez, hop.J'ai mon vérificateur de niveau.Hop, validate level.Et on pourrait se dire, du coup,on va passer de Boromir, point, niveau.Donc, là, ça vérifie le niveau de flou.
00:36:59 :Sauf qu'en fait, quitte à faire ça...Pour l'instant, c'est bon, ou pas ?Ouais, je crois, ouais.OK.Là où je veux en venir, c'est quitte à faire ça,auto-inscrire les méthodes statiques,le mettre en méthode d'instance,et faire...
00:37:17 :self, point, niveau.Et ici, au lieu de faire ça,hop,on fait un Boromir, validate level.Et j'ai fait une erreur.Ben, normal, puisque du coup,on n'a pas d'argument passé, maintenant.
00:37:33 :Hop, là.Voilà, et on préfère faire ça à la place.En gros, en fait,quand on crée une méthode statique,il faut se demander si vraimentelle est utile à la statique.
00:37:46 :Parce que tout à l'heure, je vérifiais un niveau,mais quitte à vérifier un niveau,autant le vérifier au niveau de l'instancedu personnage directement, on l'appelait self,et à l'appeler sur lui, quoi.
00:37:55 :Est-ce que son niveau est valide ?Comme, tout à l'heure,j'avais ça dans une méthode statique,un générateur de noms,est-ce que ça vaut le coup de le laisser dans la classe,ou plutôt le séparer, quoi ?
00:38:08 :C'est vraiment...Une méthode statique, c'est est-ce que j'en fais une...Est-ce que je trouve pas un moyen de me diresi c'est plus utile de l'avoir en méthode d'instanceou autre, ou en fonction vraiment à part.
00:38:18 :Ok.C'est le plus chiant.Les méthodes statiques, c'est la choseavec laquelle j'ai eu le plus de mal à l'époque.Mais c'est pas ce qu'il y a de plus simple.
00:38:28 :Est-ce que ça va, ou pas ?Parce que j'ai montré un peu ces exemples-là,où c'est un peu compliqué.Moi, il faut que je le bosse,mais je pense que ça va le faire.
00:38:40 :Ça a fait un coup de main, quand même, ou...Euh...Ouais. Moi, ouais.Là, c'est clair.Ok, cool.Ah, faut le dire, hésite pas.S'il y a un doute, hésitez pas, hein.
00:38:54 :Hésitez pas.Je voulais partir sur quoi, du coup ?Parce que je voulais partir...On le fera la prochaine fois.C'est qu'Isarao,il voulait partir sur les décorateurs, aussi.
00:39:09 :Ouais.Ok.Tu voulais savoir...C'est plutôt l'intérêt, les décorateurs ?Ouais, c'est ça, ouais.Plus l'intérêt que le savoir-le-faire.Euh...Oui, oui, oui.Bah oui, plus l'intérêt, déjà,avant de savoir le faire, puisque...
00:39:29 :Ok.On va pouvoir voir ça, du coup.Je regarde juste.Je sais plus si j'avais une idée.J'ai pas montré d'héritage, du coup,pour le mentorat, là.
00:39:38 :Je suis vraiment resté sur les...sur les instances et...et les attributs classes, souris, instances,et méthodes statiques, méthodes classes, méthodes, ainsi de suite.L'héritage, on pourra voir ça une prochaine fois.
00:39:53 :Euh...Juste, du coup, vraiment pour résumer.Classe...méthode de classe...méthode d'instance dans le constructeur.Constructeur qui est appelé, du coup,automatiquement quand on...quand on crée une instance.
00:40:09 :Ce qui fait que, ici, l'incrémentation,c'est à chaque fois qu'on crée une instance.Méthode d'instance.Jusqu'ici, j'utilise vraiment les attributs d'instance.C'est que si je crée un personnage qui s'appelle pasBoromir, Faramir,ici, ça sera propre à l'instance.
00:40:23 :Avec le paramètre ici, self.Et une classe méthode qui me permet, du coup,de passer par...par la classe directement.Voilà.Donc,pour l'instant, jusqu'ici, tout ça, c'était bon.
00:40:38 :Moi, ça l'était pas.Du coup, maintenant, c'est un peu plus clair.Ok, super.Ça va pas venir tout de suite.Ça prend un peu de temps.
00:40:47 :Je suis d'accord.Je suis content que ce soit plus clair, déjà.Mais je sais que, moi, au début,j'ai eu beaucoup de mal avec ça.
00:40:53 :Oui, oui, je pense que c'est vrai.En pratiquant, oui.Ouais, j'ai vraiment eu beaucoup de mal.Ok, donc,on va peut-être finir, du coup, sur le...
00:41:03 :Ok, je sais.On va finir sur un...les décorateurs.Enfin, les décorateurs,même si on va pas voir comment faire un décorateur, forcément,on va parler un peu de tout cas un décorateur.
00:41:17 :Alors, je vais revenir ici.Hop, ça va.On va peut-être le montrer.Tac.Par exemple,est-ce que j'en ai ici ?Je l'ai montré hier sur Account.
00:41:27 :Est-ce que j'ai pas un projetoù ça pourrait être plus utile ?Je regarde vite fait.Là, j'ai quoi ?J'ai pas mon stock.Parce que je me suis déjà créé des décorateursextraits pour Django plusieurs fois.
00:41:43 :En plus, ça pourrait être très sympa.Ça, on s'en fiche.Ça, on s'en fiche.Hop, là.Ok, donc,qu'est-ce qui me fait...Génial.Qu'est-ce qui se passe ?
00:42:01 :Est-ce que j'ai encore un projet ?Ah oui, mais j'ai changé de version.Alors, je fais juste un truc vite fait.J'aime pas quand ça me plaît.
00:42:08 :Ça, hop.Je suis pas dans le bon dossier.Là, c'est pour ça.Bon, c'est pas grave.Voilà, je suis dessus.Ok.Ok, bon.Je regarderai ça plus tard.
00:42:23 :De toute façon,on va pas expliquer le code.Du coup,en fait, là,j'ai un décorateur icique j'ai créé moi-même.Donc,j'ai un décorateur icique j'ai créé moi-même.
00:42:32 :En fait,ça me sert ici.En plus,j'aurais pusimplifier ça à l'époque,je pense.Utiliser un décorateurde bulletin de Django.Bon, bref.Sur le principe.
00:42:45 :Je me suis fait,en fait,un décorateur,ou quoi que non.En fait, non.Ici, par exemple,c'est un jeu de rôle.C'est un jeu de rôleque j'avais faitque je mettrai en productionun jour,parce queje l'aurais bien fait tester à l'époque.
00:43:00 :En gros,c'est une permission.En fait,ça me sert de permission.Savoir si quelqu'unpeut accéder à une vueà une vue Django.Par exemple,ici,sije veux que chaquepersonnageait accès vraimentà sa pageet,enfin,vraiment qu'à ça, quoi.
00:43:21 :Je ne veux pasque personne puisse y accéderautrement.Alors,je ne sais pas si j'aiune vue plus,ça ne me plaît pas.Je n'aime pas cet exemple.
00:43:31 :OK.Bon, c'est pas grave.On va regarder cet exemple-là.Par exemple,j'ai plusieurs vues comme çadans mon projet,plusieurs fonctionsqui me servent de vue pour Django.
00:43:45 :Donc,je ne sais pas si,pour ceux qui ne sont pasencore à l'aise avec l'APOou peu importe,avec Python,en général,à ce niveau-là,là,les vues,ça me permet d'afficherdes chosessur mon site Internet,des informations.
00:43:59 :Et je vais les récupérerle personnagede l'utilisateur.Sauf que je me rends compteque je récupère plus simpleau niveau requête.Comme quoi,le refactoring,quand on revient un an aprèssur un projet,c'est important.
00:44:16 :Bref,à l'époque,je me suis ditque je vais avoir un décorateurqui me dit que si jamaisla personne qui essaied'accéder à la vue,ce n'est pas son personnage,elle se fait rejeter.
00:44:27 :C'est un caractèrepar mission.Donc,ici,j'ai la logiquequi fait que la personnese la rejette.En gros,je recherchele personnageet je le récupère.
00:44:41 :Je vérifiel'utilisateurqui est connecté.Et si ça ne correspond pas,je dégagel'application.En gros,c'est comme ça que ça se passe.Et donc,j'ai un décorateurqui fait ça,je vais les modifierma fonction.
00:44:59 :Sauf que le problème,si on me demandaiten quoi un décorateurc'est pratique,l'utilité,c'est que je ne vais pasles réécrire dans toutes mes vuesà chaque foistoute la logique.
00:45:11 :Surtout,si à un moment donné,j'ai envie de changerquelque chose là-dedans.Si je l'avais écritpour chaque vue,il faudrait que j'aillesur chaque vuepour faire la modification.
00:45:20 :Ça serait un peutrop la galère.Du coup,j'ai un seul décorateur.Si j'ai besoinde modifier la logique,et toutes les vuesqui utilisent ça,comme ça,elles seront impactées.
00:45:30 :Comme je veux.Ah ouais,c'est hyper puissant.J'en ai une là.Est-ce que j'en ai d'autres ?J'en ai une là.J'en ai déjà trois.
00:45:47 :J'ai ouvert deux fichiers,j'ai déjà troisà trois endroitsoù j'ai le décorateur.Ça veut dire quesi tu as besoinde modifier maintenant,il faudrait que je modifiema fonctionnalité.
00:46:00 :Le problème,c'est quesi tu avais tout çadans chaque vue,tirer sur chaque vue,il ne faut pas oublierune vue du coup.Il ne faut pasque j'oublie mes vues.
00:46:10 :Donc celle-là,je l'ai fait.Je vais le modifier.Alors que là,je le modifie ici une foiset c'est bon.Je ne vais pas les modifiervingt fois.
00:46:18 :Est-ce que c'est bon ou pas ?Ouais.Là, je pars sur un exempleun peu plus complexeoù c'est sur des vues Djangoet tout.
00:46:27 :Mais c'est le même principe.Ici, il y a des décorateursqui sont d'Ultimate Django.On peut très bien direqu'on ne va pas réécrireune logique pour vérifiersi un utilisateur est connectépour ça.
00:46:43 :Donc on a un décorateurqui existe.On l'applique à tout.Ça fait une ligne.C'est en deux motset voilà, c'est fait.Et je l'utilise partout.
00:46:51 :Donc voilà en grospour le décorateur.C'est puissant, quoi.Oui, carrément.La prochaine fois,on fera un passagevraiment sur le décorateurou en Python puroù on verra des choses intéressantessur la création de décorateurs,comment ça vient modifierune fonctionet surtout,comment garder une métaou les documentations
00:47:15 :des fonctions qu'on décoreparce que du coup,quand on a un décorateur,le décorateur vienteffacer la documentationde la fonction,par exemple.On pourra voir commenton fait tout ça.
00:47:27 :Mais voilà,c'était un petit exemplepratique avec Djangopour montrer queça me sert à éviterd'écrire 10 000 foisla même choseen partie.
00:47:36 :Est-ce que ça vacomme première réponsepour le décorateur ?Oui.C'est un exemple comme çamais au moins,c'était concret.Donc voilà.Je ne sais passi on a des questions.
00:47:56 :C'est passé vite en fait.Est-ce qu'il y ades questions ?J'en ai unemais pour le coup,ce n'est pas sur les classes.C'est au niveau de l'IDE.
00:48:07 :C'est quoi le mieuxà utiliser ?Du coup,c'est PyCharm ou VS Codeparce que je voistout le monde utiliserVS Code du coup.
00:48:14 :Alors moi,j'étais au moinslongtemps sur PyCharmpourtant,j'étais vachement débutantet j'ai dû vite allersur PyCharm.J'aimais bien.J'aime toujoursce que j'y apprends.
00:48:26 :J'aime toujours.Après, c'est une préférence.J'ai testé VS Code.J'adore aussi.Il y a quoi qui changeentre les deux ?Alors,c'est juste que moi,enfin PyCharm,après c'est conversion payantepour en chargele JavaScript,le CSSmais vu que moi,je suis à côté,je fais du CSS,
00:48:44 :du JavaScript,eh bien,sur VS Code,sur VS Code,c'est pris en chargegratuitement.VS Code,ça prend toujours chargequasiment.Que PyCharm,c'est quand mêmetrès orienté Python.
00:48:57 :OK.Et surtout,ce que j'aime biensur VS Code,c'est que c'estultra léger.Et ça,à chaque fois,PyCharm,alors peut-êtreque c'est mon PCqui est un peu en galèreaussi,mais ça me la faitsurtout deux PC différents.
00:49:13 :PyCharm,il a souvent des problèmesde mémoiredoncle truc,c'est que PyCharm,VS Code,en fait,c'est quand mêmevachement customisable.Moi,j'ai tout ce que je veux.
00:49:28 :Par exemple,j'ai installéGuildgraph ici,comme ça,je vois un peutous mes historiquesque j'ai sur mes projets.Je vois quand j'ai eu,par exemple,des branches,quand j'ai commencéà diverger,quand je suis revenudans la branche principale,et ainsi de suite.
00:49:43 :On peut vraimentinstaller tout ce qu'on veut.Là,j'ai un problèmesur du...Je ne sais passi j'ai un problèmede code ici,de vue.
00:49:52 :On pourrait très bienlui direque je suis dansun account.Allez,on va faire ça.Il y a mêmeles...Maintenant,après,ce n'est pas conseilléquand on débute,mais il y al'Azure intégrée.
00:50:06 :Je lui disadd a docstring.Hop.Et là,qu'est-ce qu'il va me faire ?Hop,il me créema docstring.C'est vraimentune chaîne complète.
00:50:17 :Donc,je n'accepte pas iciparce que je n'en ai pas besoin,mais on peut vraimentinstaller tout ce qu'on veut.OK.D'accord.Merci pour ta réponse.
00:50:26 :Donc,voilà.Tac,c'est bon.Voilà.S'il n'y a pas de questions,pour moi,c'est bon.Et puis,ça fait du biend'avoir un petit mentorat.
00:50:38 :On revient en base.Ça faisait longtemps,on faisait beaucoup de chosesplus avancées en ce moment.Tac,ça,c'est bon.Voilà.Il n'y a plus de questions,du coup ?
00:50:49 :Non ?OK.Écoutez,j'espère que ça vous a plu.Après,il y en a déjà plein iciqui sont là,donc ils sont déjà habituésà tout ça.
00:51:06 :Mais,au moins pour ceuxqui sont dans le parcoursqui ont commencé il y a pas longtemps,ça fait du bien.Ça fait du biende revoir un peu tout ça.
00:51:13 :Si,juste une dernière question.Étant donné quemoi,je suis débutant,est-ce que je peux,est-ce que c'est quand même conseilléque je vienneaux autres mentorats,même si je ne comprends pas ?
00:51:25 :En fait,je voulais déjà veniraux autres mentorats,mais j'ai peurque ça m'embrouille,en fait.Tu ne seras pas embrouilléparce que tu verras des chosesque...
00:51:38 :Ah,salut Baptiste.Parce que tu sais déjàdes choses quand mêmeet...Tu vas avoir des choses,tu vas te dire,tiens,ça me dit quelque chose,ça je l'ai déjà vu avant,en fait,au fur et à mesure.
00:51:51 :Moi,quand je commençais,perso,à l'époque,c'était Pierre-Andréqui faisait les mentorats.Il montait des trucsdes fois avancésoù je me disais,ouah,est-ce que j'y vais quand même ?
00:52:02 :Et j'y allais à chaque fois.Il y a des trucsque j'ai appris,je ne sais pas,au bout d'un an,en fait.Au bout d'un an,ouais,ok.
00:52:12 :Ouais,ouais,j'aimerais bien,ouais.Ouais,ouais,ok.Ouais,il n'y a pas de problème.Il y a eu une semaineque j'étais déjàet que j'avais commencé Python.
Aucune occurrence trouvée pour « ».