Session du 01 avril 2025 à 21h00
TOSA & Certifications
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 le name mangling en Python
Explorez le fonctionnement du name mangling en Python et découvrez pourquoi certains attributs semblent disparaître ou devenir inaccessibles.
00:00:00 :Voilà, c'est parti.Bon, alors, rebonsoir à tous.Donc ce soir, comme vous avez pu le voir, il n'y avait pas de sujet,parce que ce que je vais vous présenter, c'est un petit peu particulier en Python.
00:00:18 :Ce n'est pas quelque chose que vous allez croiser très très souvent,mais c'est bien de le connaître.Je ne vais pas vous dire le nom de suite,parce qu'il va falloir que j'essaie de vous faire travailler un petit peu,un petit peu réfléchir.
00:00:34 :Mais vous allez voir très vite de quoi on parle.Bon, je vais couper ma cam.Voilà, je ne pense pas que vous êtes venus pour me voir, moi.
00:00:43 :Vous êtes venus pour voir du Python, je pense.Voilà.OK.Je vois qu'il y a des messages sur Discord.Je ne sais pas ce que c'est.
00:01:02 :Ah, OK, merci.C'est rien.Alors, on va basculer sur...Voilà.Alors, je vais vous taper un petit script, là, vite fait.Vous allez me dire après ce que vous en pensez.
00:01:26 :Est-ce que c'est assez gros pour vous ?Non.Si ça pouvait être légère.Voilà.Super.OK.C'est mieux, oui.Merci.De rien, de rien.Allez.
00:01:53 :On va l'appeler...Je ne sais pas le nom.Notre original.Ah.Qui est-ce qui arrive ?Voilà.Salut, Sylla.Alors, on continue.Donc, hop.Qu'est-ce que je fais ?
00:02:24 :Je me rajeunis ou je m'éloigne ?Hop là.OK.OK.Ça semble bien.OK.Alors, on va créer un petit objet.OK.Voilà.On va faire ça.
00:03:07 :On va faire...Voilà.Ça semble bien.Hop là.OK.On va l'afficher, lui.Voilà.Super.Merci.OK.Je ne sais pas.On va le faire.
00:03:51 :C'est pas...Ouais.Mais...Voilà.Alors.Est-ce qu'il y a quoi que ce soit qui vous choque dans cet escrit ?En ligne 5, c'est...C'est moins ou c'est égal ?
00:04:16 :D'accord.OK.Oui, oui, oui.C'est pour ça que j'ai hésité à prendre le Bepo,mais le Bepo, on le retrouve nulle part sur aucun PC dans la vraie vie.
00:04:35 :Alors, est-ce qu'il y a quoi que ce soit qui vous gêne dans ce script ?Donc, on crée un objet par an.Allô, Stéphane ?
00:04:49 :Ouais, c'est là.Oui, la 17e ligne.La 17e ligne.Qu'est-ce qui te dérange dans la 17e ligne ?Ouais, c'est deux underscore.Ouais, c'est ça.
00:05:04 :Comme défini dans le self.OK.Ça, c'est manqué, fait.L'actualité privée.L'actualité privée.Alors, c'est pas un attribut privé.Alors, pour ceux qui viennent d'autres langages,notamment par exemple le C,quand on va faire ça, ça va destiner à un attribut privé.
00:05:26 :C'est un attribut qui sera pas accessible en dehors de la classe.Python n'a pas ce genre de mécanisme.Oui, Python laisse accès à tous les attributs,quelque soit la manière dont ils sont nommés.
00:05:42 :Enfin, presque.Mais tu es sur la voie, Sylvain.OK, d'accord, Stéphane.Bon, on lance ce script,et pour vous, il n'y aura pas d'erreur, normalement.
00:05:57 :Et je pense que ça s'applique la même chosesur le def.get.age, la méthode.C'est le même principe,mais c'est pas réellement des attributs privés.D'accord.
00:06:12 :Bon, on lance pour voir ce que ça nous donne ?Ouais, ça va.Allez, c'est parti.Ah !Qu'est-ce qu'il nous dit ?L'attribut erreur.
00:06:26 :Parent n'a pas d'objet, n'a pas d'attribut.getAge.Alors, ça peut paraître bizarre,parce qu'on a bien une fonction getAge, d'accord,qui renvoie l'âge.Donc, logiquement,avec l'objet.getAge,
00:06:44 :donc c'est une fonction,le self, je rappelle,pour Nordin et Préservant Thora,on a rappelé que le self,c'est l'objet en lui-même, d'accord.Donc, il n'y a rien qui manque, normalement.
00:06:54 :Alors, pourquoi est-ce qu'il nous renvoie cette erreur-là ?Alors, la réponse, c'est simple,c'est le sujet de ce soir,c'est le nommement de l'objet.Alors, vous n'allez pas le voir beaucoup,mais ça existe.
00:07:16 :Alors, pour vous expliquer ça,je vais vous montrer ça en direct.On va supprimer ce qui est ici.Voilà.On va supprimer tout ça.Voilà.
00:07:31 :Et là,à la place de cet objet,je vais imprimer le dire.Le dire.Alors, qu'est-ce que ça fait le dire ?Qu'est-ce que ça va nous imprimer ?
00:07:45 :Est-ce que vous avez vu ?Les méthodes et attributs de l'objet en cours ?Voilà, c'est ça.Alors, voyons voir ce que ça nous renvoie.
00:07:54 :Alors, il y en a beaucoup.On va s'intéresser surtout à ceux qui sont en début.Et on a deux attributs.Parent âge.Parent get âge.
00:08:07 :Parce que là,tous les autres qui sont classe,des attributs, dire, dire doc,ça c'est les trucs de base dans tous les objets.D'accord ?
00:08:19 :Tous à la fin, on retrouve bien get name et name.D'accord ?Effectivement.On ne retrouve pas l'underscore.Underscore get âge.Voilà.Et bien en fait,ils sont devenus parent get âgeet parent âge.
00:08:37 :Parce qu'en fait, en Python,lorsque vous allez avoir des attributs comme ça,il va les transformer quand vous allez faire l'objet,et les appeler avec un simple underscore,le nom de la classe,et votre attribut que vous avez mis avec deux underscores.
00:08:56 :D'accord ?D'accord.Donc, qu'est-ce que ça va permettre ça ?Déjà, ça veut dire qu'en fait,l'objet,vous n'allez pas pouvoirl'attribuer en question.Vous allez pouvoir,c'est intéressant surtout par exemple,lorsqu'on va faire de l'héritage,et je vais vous montrer ça un peu après.
00:09:21 :L'objet d'origine dans la classe parent,il va exister d'une certaine manière,mais avec le nom de la classe parent.Mais si vous héritez dans une autre classeque cette classe parent,vous allez avoir alorsce comportement qui va se créeravec le parent âge, d'accord ?
00:09:45 :Et le parent get âge.Vous allez pouvoir modifier dans la classe enfantla fonctionou la valeur de la variablequi a été définie comme ça.
00:09:56 :Et vous allez pouvoir quand mêmeavoir accèsà la fonction de la classe parentet à la valeur de l'attribut de la classe parentet les remodifier.
00:10:07 :Mais en utilisant les fonctions.Je vous fais une petite démonstrationpour que ça soit un peu plus clair ?Yes.Allez, hop, on va modifier ça.
00:10:17 :Alors, dans le get âge,ce qu'on va faire,c'est qu'au lieu de retourner simplementcelle âge, on va se mettre,on va recréer la classe,la variable ici.
00:10:29 :On va l'appeler ça en variable normalepour que ce soit un peu plus simple.On va juste jouer avec la fonction.Alors, on va se faire une petite,voilà,classe parent.
00:10:43 :Clac, clac.Voilà, oui.Voilà.Voilà.OK.Maintenant,je vaissauvegarder la méthode.Non, c'est pas ce que je veux.C'est déterminé, putain.J'ai fait l'erreur de fairel'essai copilot et sans regarder tout.
00:11:16 :Ça me fait des suggestions à mort.Il est un petit peu intrusif, je trouve.Euh...T'inquiètes, là,il faut que je refonce comme ça.On va la faire simplifieret on va créer notre méthodespécifique de naming.
00:11:33 :Ici, en sauvegardant la méthode.OK.Maintenant,je vais créer une classe enfant.OK.Je vais arrêter de m'écouter.Voilà.Euh...Hop.On va faire limite.
00:11:48 :OK.Euh...On va lui donner un nouveau nom.Euh...Julien.Voilà.Et...Maintenant, ça me va très bien.Maintenant,je vais surcharger ma méthode getName.
00:12:08 :OK.On va retourner le selfName.Et je vais surcharger ma méthode getAge.Et là,on va lire return.S.Classe.Enfant.Return.Très bien.Tout ça.
00:12:30 :OK.Donc, maintenant,on va créer un objet enfant.Objet.Égal.Child.Puisque là, tout va bien.Je vais...Je vais...Afficher...Euh...L'objet...Euh...L'objet getAge.
00:12:54 :OK.On va en rester là pour l'instant.Donc,je lance le script.Qu'est-ce qui ne va pas ?Euh...Parce qu'en fait,dans le limite,il n'y a pas d'underscore.
00:13:20 :Euh...Ah oui, c'est pour ça.C'est parce quej'ai laisséle selfAgeavec le underscore.Merci.Voilà.OK.Donc, il me retourne bienla classe enfantavec l'âge de 20 ans.
00:13:40 :D'accord ?Et maintenant,je vais vous montrer ce quel'effet du nameMangling.Je vais reprendre mon objet.Et là, pour appelereuh...la classe oùeuh...
00:13:56 :l'attribut qui a été sauvédans le nameMangling.Donc là, ici,mon underscore, underscore getAge.Donc,je vous rappelle,on met d'abordla classeque l'on veut atteindre.
00:14:08 :Et ensuite,la fonctionqui a étéeuh...affichée par le nameMangling.OK ?Et alors là,qu'est-ce qui va se passerà votre avis ?
00:14:22 :Qu'est-ce que va m'afficherce...ma deuxième ligne ?La fonction getAgede...parents.La classe parents, oui.Et quelle va êtrel'âge de l'âge ?
00:14:44 :L'âge du parent, 48.48.48 ?Alors on essaye pour voir.Toujours 1.Voilà.Parce qu'en fait,le nameMangling,ce qu'il a fait,c'est qu'il aeuh...
00:15:05 :mis de côté la fonction.D'accord ?Puisque là,vous êtes sur la fonctionqu'on a fait un nameMangling.Je vous remontre.On l'a fait ici.
00:15:13 :En faisant un nameManglingde getAge.D'accord ?On a créé une nouvelle...une nouvelle fonction ici.Qu'on a stockéedans un nameMangling.C'est-à-dire qu'on a prisla fonction telle qu'elle est là.
00:15:25 :Et on l'a sauvegardée là-dedans.Quand on a crééavec la classe enfantsun nouvel objet,l'objet est allé chercherles éléments de la classe parents.
00:15:36 :D'accord ?Donc ses fonctions,ses attributs d'origine.Les attributs,comme ils sont restés...Ils étaient là.On les a écrasés ici.Donc là,ils ont changé de valeur.
00:15:52 :Pas de soucis.Et par contre,quand on a appelé la fonctionqui a été nameManglé,il a utilisé la fonctionqui est dans la classe parents.
00:16:00 :Mais pour le setAge,il a utilisé celuique vous avez dans la classe enfants.Puisque c'est un objetde la classe enfants.Et c'est à ce moment-làque vous avez une idéede type d'aspirée.
00:16:14 :Est-ce que vous comprenez le principe ?Pas tout à fait.En fait,la classe qui est ici,d'accord,je l'ai sauvegardée telle qu'ellegrâce au nameManglé.
00:16:39 :D'accord ?Maintenant,ça reste une fonction,pardon,en tant qu'au moins une méthode.Ça reste une méthodequi prend des attributs.OK ?Les attributs qu'elle va prendresont en fonctionde l'instance dans laquelleelle existe.
00:16:55 :OK ?OK.L'instance qui existe là,c'est l'instance de child.De child, ouais.OK ?Donc,quand on va faire référenceà l'attribut setAge,ici,le self,là,c'est l'objet.
00:17:14 :L'objet,c'est un objet de type child.OK ?Donc,quand elle a besoind'un attribut d'objet,elle va chercher dans lesattributs d'objetle child.
00:17:23 :Et comme on lui demandede reprendre setAge,voilà,elle reprend l'âgequi est ici.Donc,il y a pour valeur 20.D'accord.Donc,ce n'est pas parce qu'on a20,ça va remonterl'archi de...
00:17:41 :Non.Alors,on va essayer comme ça.Normalement,si je ne fais pas d'erreur,ça devrait fonctionner.On va relancer ça.Et l'erreur,c'est bien ce qu'il me semblait.
00:17:58 :Alors,on va le faire comme ça.Hop,ce sera plus simple.Je vais passericiun attribut ageégal 0.Et là,on va passer base.
00:18:29 :Ici,je vaissauvegarderici.Ça devrait marcher comme ça.Voilà.Il ne faut pas essayertous les mêmes trésors.On va le faire comme ça,ce sera plus simple.
00:18:58 :Voilà.Il faudrait que je metteun attribut pour le fond.Normalement,ça devrait être comme ça.Et là,comme je demandede passer un attribut en plus,logiquement,si je faisun attribut plus,ça devrait marcher comme ça.
00:19:27 :Et là,comme je demandede passer un attribut en plus,ça devrait marchercomme ça.Logiquement,on va faire le test.Voilà.Là,il ne ressort pas l'objet,mais il a détectéqu'il faisait malà aller chercher quelque chose.
00:20:10 :Bon,il n'arrive pas à le retrouveren état,parce que j'ai dû me planterquelque part.Enfin,peu importe.Et là,vous voyez bienqu'il cherche à chercherune autre valeur.
00:20:21 :OK ?On va rétablir tout çatel que c'était.OK.Voilà.Voilà.Voilà.Normalement,on est revenu à zéro.Et par contre,je vais faire ça.
00:20:42 :Voilà.Voilà.Là, si je lance ça,vous voyez qu'il me met biendans le deuxième exemple.Par exemple,l'âgequi est ici.OK ?C'est bien un fonctionnementde la méthode, en fait.
00:21:03 :Il n'y a pas de problématique.Sauf que la méthode,elle va s'exécuterdans le cadre de l'instancequi a été créée.Alors,le moment de vie,j'aime bien en parler un petit peu,parce qu'en fait,alors,objectivement,si vous l'utilisez une ou deux foisdans toute votre viedans toute votre vie
00:21:24 :de script Python,pour ce qui est d'éthique classique,on sera peut-êtrearrivés au summum.D'accord ?Mais cette petite particularitéde Pythondans la gestiondes héritages,ainsi de suite,nous permet de bien toucherdu doigt, justement,ces notionsde classe,d'objetet d'instance.
00:21:46 :D'accord ?Le fait que, justement,quand vous créez un objet,ça crée une instanceet c'est dans cette instancequ'existent diverses choses.Les méthodes,les appréciés,ils n'existent pas en dehors.
00:21:59 :Ils ne sont pas influencés,basiquement,parles héritages,les classes dont elles héritent,ainsi de suite.Si on imprime le dicde notre objet,je vais supprimer ça,on va imprimer le dic,vous savez ce que c'estque le dic ?
00:22:20 :Pardon, c'est-à-dire que c'est quoi ?Le dic d'un objet.Le dictionnaire de...Voilà.Ça vous renvoieles variables de l'objetdans une seule action.Sous la forme d'un dictionnaire.
00:22:47 :OK ?Donc là, on voit bienque le nom est égal à Julien,et l'âge est égal à 20 ans.Donc on est bien sur un objetqui a ses propres caractéristiques.
00:22:57 :Et si je print le dic,on va avoir tous les attributs.Est-ce qu'il semblait...J'ai manqué, non ?Oui.Là, on retrouve biennotre même handlingavec le paranguettage.
00:23:26 :Et à la fin,on revoit biennos fonctions,nos...et nos attributsdu dic objet.Nos méthodes et nos caractéristiques.Nos méthodes et nos attributs.
00:23:45 :Par contre,je précise pour une incapace,c'est peut-être pas aussi avancéà ce niveau-là.Tout ce qui est là, là.Je vais essayer de le surligneren complet.
00:23:58 :Voilà.Toute cette partie-là,typiquement,quand tu vas faire un print direde l'objet,de n'importe quel objet,tu vas les retrouverquasi systématiquement.D'accord ?
00:24:18 :C'est, on va dire,une forme de...C'est un packagequi existe automatiquementdans toute instanced'un objet Python.C'est bon pour toi, hein, Kata ?
00:24:33 :Voilà, voilà.Donc, voilà ce que je voulaisvous montrer rapidementsur le mènement gris.Alors, après,on peut aller très très loinparce qu'il y a...
00:24:46 :On s'est amusé avec Gabsur des détailsde mènement gris.Je peux vous assurerqu'on peut s'amuserà aller extrêmement loinavec ça.Maintenant,en tout sens,vous ne l'utiliserez pastous les jours.
00:24:59 :Comme je vous disais,l'intérêt, c'est justement ça.C'est de bien percevoircette notiond'instance d'objetet le fait que c'est pasparce que vous avez faitun héritaged'une autre classe,dans une classe,que tout va se récupérerexactement comme vous voulez.
00:25:15 :Alors, pour en venirà ce que Sylla disaitau début,oui, ça s'apparentebeaucoup aux méthodes privéesqu'on peut voirdans votre langagecomme le C,mais c'est pas réellementde la méthode privéeparce que Pythonn'a pas de conceptde méthode privée, en fait.
00:25:29 :Donc, méthode ou attribut privé.OK ?Yes.OK.Est-ce que c'estun peu plus clairpour tout le mondecette histoirede nemmangling ?Oui.
00:25:46 :Je t'avoueraique je n'ai jamais vu.Ah oui, oui.Non, mais c'est extrêmementrare d'utilisation.Mais essayez biende le connaîtreque ça permet de voir le truc.
00:25:55 :Alors après,je vous invite à allervoir un peu plus loincomme d'habitude.À jouer avec ça.Essayez de le tendreun petit peu dans tous les senspour essayer de bien comprendre.
00:26:03 :Maintenant,vous échapperez pastrop dessus non plusparce que,comme je vous l'ai dit,vous ne me croiserez pasde ces deux minutes.D'accord.C'est bon pour vous ?
00:26:15 :Oui, c'est bon.OK.Alors, s'il n'y a pasde questions sur le QV,je vais vous montrerune petite astuceque j'ai découverteil n'y a pas longtempssur Python.
00:26:32 :Alors,que j'essaye de refaire ça.Je réfléchispour pas me planter.Alors,on va créer une classe.On voit très bien ça.Alors,on va fairedefinitinitLà, ce que je vous montre,c'est le petit bonus.
00:27:12 :On verra.C'est queon va rester dansles voituresque Thibault aime biendans les classes Objet.On va dire marqueetvoilà.OK ?
00:27:33 :Alors,là, typiquement,j'ai fait un objet à choix.OK ?Vous m'entendez toujours ou pas ?Est-ce que j'ai un petit videdans mon casque ?
00:27:45 :Est-ce que ça a coupé ?OK.Donc là,si je crée mon objet à choix,voilà,Renault Clio 20 000.Jusque là,j'imprimemon objet à choixmodèle prixOK.
00:28:06 :Je lance ça.Qu'est-ce qu'il y a ?Qu'est-ce qu'il y a ?Ah !L'init n'est pas biendéfini.Voilà.C'est bon pour ça.OK.
00:28:24 :Il m'affiche tout.Donc ça,ça permet de créer des voituresen objet de rentréedans la marquemodèle prix.Maispar exemple,si on veut choisir la couleur.
00:28:37 :OK.La première solution,la plus simple,je pense que c'est celleà laquelle vous pensez de suite,c'est de rajouter un attribut couleur.D'accord ?
00:28:53 :Maintenant,il y a peut-être des personnesqui voudrontchoisir la couleuret d'autres,peu importe,ils prendront la couleur qu'il y auraet puis voilà.
00:29:04 :Donc,il faut savoirsi la personne va choisirou pas la couleur.OK ?On pourrait faire ça comme ça.Dire par exemple,ifcouleurif couleurdifférent dede non.
00:29:29 :Hop là.On va faire comme ça.On va dire que par défaut,la couleur,elle est rouge.Par exemple.Donc, si elle est différentede rouge,parce qu'on l'a précisé.
00:29:45 :D'accord ?Il faut que je la remette làsinon je vais avoir un petit souci.Voilà, c'est la couleur.Là,j'ai dit5.couleur.Ça n'a pas changé grand choseÇa n'a pas changé grand chose.
00:30:03 :Voilà.Mettons, le fait de choisir sa couleur,on va dire que c'estça augmente le prixde 1000 euros.OK ?Donc là, self.prixégalon va faire une incrementationvoilà.
00:30:19 :Plus1000et voilà.OK ?Si je fais pas mon inventation,ça va pas le faire.Voilà.Et là, du coup,si je vais mettre une couleurpar exemple, je vais direnoire.
00:30:33 :OK ?Je lance.OK ?Mon prix a bien été modifiécomme on voulait.Il n'y a pas de souci.Maintenant,on va dire quepar exemple,par défaut,il n'y a pas d'autoradio.
00:30:53 :OK ?Donc par défaut,c'est une valeur qui est égale à fausse.OK ?Si je veux rajouter l'autoradio,c'est 500 plus.C'est bizarre.Des fois, je me disde lire dans mes pensées le bazar.
00:31:11 :OK ?Tu l'as déjà fait peut-être ?Non, même pas.En plus, je suis en traind'inventer le trucen même temps que je vous parle.
00:31:19 :C'est dingue.C'est un petit peu flippant,je vous cache pas.Oui, c'est flippantà ce niveau-là, oui.Donc, du coup,là, je vais choisiravec l'autoradio.
00:31:29 :OK ?OK, je vais bien remonter.On va pas passer la nuitsur les options.Mais vous imaginezque dans le choix d'une voiture,pour ceux qui ont eu la chanced'en avoir une,qui sont déjà passéssur les concessionnaires,c'est vrai que les optionspeuvent y avoir des milles
00:31:47 :et des unes.Et ça va devenir très compliquési à chaque fois,on est obligéde mettre notre...notre attribut,de le créer.De dire,ben voilà,si c'est comme ça,ben tu rajoutes le prixet tu modifies le prix,ainsi de suite.
00:32:03 :OK ?Pour ça,il y a une autre solution.Donc là,on va supprimer tout ça.Et,on va mêmeréduire tout çaà ça.
00:32:26 :C'est la plus simple expression.On veut juste la marque.Pour commencer.Allez,on va mettre le prix aussi.Voilà.On va dire un basique.Donc maintenant,si je veux ajouter le modèle.
00:32:50 :Modèle.Voilà.Je rajoute un attribut modèleà ma voiture.Maintenant,si je mets un def couleur,on avait dit que par défaut,notre couleur,elle était rouge.
00:33:10 :OK ?Et là,je mets 16 couleurségale couleur.Et on va revenirsur notre photo radio.Voilà.Par défaut,hop là,il est égal à fausse.
00:33:33 :OK.Et,on va faireun calcul de prix.On prend le prix.Et donc,on va faireun calcul de prix.On prend le prix.
00:33:53 :Et donc,on va faireAlors,est-ce que vous savezla valeur numériquede tout est fausse ?C'est 1 et 0.Voilà.Donc,on peut l'utiliser pour faire des calculs.
00:34:10 :On va dire queseul prixest égal à prixplus,alors on avait ditle choix de la couleur,c'était 1000.Voilà.Attention,le plus,il n'est pas passé.
00:34:27 :Merci.16.Couleurégale rouge.OK.Excellent.500.Self,autoradio.Et là,on n'a pas besoind'un dégât de rouepuisque c'est un bouléen de base.
00:34:57 :Donc,il va nous retournerun trou ou un fousse.OK.Donc,maintenant,j'ai l'appui voiture,c'est l'objet à choix.J'étais parti là-dessus.En plus,je n'avais pas récupéréla copine.
00:35:13 :Voilà.OK.On recommence.Là,si je veux créermon voiture,je vais d'abordcréer ma voiture A,qui va être égale àvoiture,Renault 20 000,on va se le suivre.
00:35:31 :OK.Je vais créerma voiture Pio.Je vais créerune voiture bleueet autoradio de roue.Et,je vais calculer mon prix.Je ne sais pas pourquoij'ai mis prix là,parce que c'est ça,en fait.
00:35:53 :Voilà.OK.C'est encore pareil.Voilà.Hop.Et là,si je fais un printdevoiture1.prix,on va vérifierce que ça donne.Normalement,euh...Ah, oui.
00:36:19 :Voilà.Il y a un self-colorqui est inversé,ligne 18.Ah.Je ne sais pascomment caler ce soir.On va y arriver.Je vais faire ça.
00:36:41 :Oui.Voilà.On va y arriver.Voilà.Là,euh...On a choisi l'autoradio.Couleur bleue.Pourquoi n'a pasmis le choix nul ?Normalement,mon self-colorest différent de rouge.
00:37:04 :Ça aurait dû me renvoyer.Bon, tant pis.On va...On va faire autrement.On va laisser comme ça.On va jusqu'à...L'autoradio,ce n'est pas le principal.
00:37:16 :Euh...Sinon,on fait un test...Ouais.Je pourrais faire une conditionou autre,mais ce n'est pas grave.On va rester là-dessus.Ce n'est pas le plus important.
00:37:27 :OK.C'est bon.C'est bon.C'est bon.C'est bon.C'est bon.C'est bon.D'accord.Donc là,pour créer ma voiture,avec toutes mes options,j'ai faitplusieurs lignes.
00:37:41 :Maintenant,je vais vous montrerune petite astucequi va permettrede faire tout çasur une seule créationde barrière.Je vous montre ça.Qu'est-ce que je vais rajouter ?
00:37:52 :On va laisser tombernotre calcul de prix.Voilà.Il s'en va là-dessus.Et là, maintenant, du coup,qu'est-ce que je peux faire ?Je fais ma voiture.
00:38:16 :OK.Je vais faire un modèle.Ah, tu le fais à la volée.Et voilà.Excellent.Je vais faire un printvoiture.Excellent.Je pense que ça,on pourrait le réutiliserplus souventque ce que tu as faiten première partie.
00:38:40 :Voilà, je me doute.Merci.Bon, on a déjàbien été crééavec tous les ateliers.Ce n'est pas le réflexed'utiliserl'underscore,l'underscore dicte.Je n'ai pas le réflexe du tout.
00:39:05 :C'est bien, ça.Rien que ça, c'est bien, en fait.Bien joué.Vous voyez,je ne suis pas obligéde tout mettre.Si, par exemple,je ne veux pas changer la couleur,je lance.
00:39:21 :Je n'ai pas de couleur définiedans les ateliers.Puisque je n'ai pasun atelier de couleur.D'accord.Donc,ce simple return cell,en fait,va vous permettred'enchaîner les choses.
00:39:38 :Alors,le fait,avec ce return cell,vous l'avez déjà utilisé,c'est probablement.Si je vous écris ça.Égal,allez.OK.Voilà.Est-ce que je fais un printde variablepointreplace.
00:40:12 :Je vais remplacer les hauts par des hauts.Pointcapitalize.Pointqu'est-ce qu'on va faire ?Allez.On va faire un autre replace.Allez.Hop.Qu'est-ce qui se passe ?
00:40:34 :Toutes les méthodesse sont bien enchaînées.OK.Il n'y a pas de soucis.Et en fait,c'est simplement parce quedans la pièce STR,typiquement,la méthode replace,la méthode capitalize,la méthode capitalizeet toutes les autres méthodesqui sont comme ça,elles ont simplement à la finun return cell.
00:40:52 :D'accord.Ce qui fait queStéphane ?Oui ?Au cas où,par exemple,disons queméthode modelcouleuravec d'autrestypes de retoursautres que le cell.
00:41:12 :J'ai une dictionnaireà retournerou bien j'ai une listeque je dois retourner.Là,est-ce que ça va marcher ?Pour faire ça,tu ne peux faire qu'avecdu return cell.
00:41:23 :Pardon ?Pour utiliser ce principe-là,ta méthode doit forcémentse terminer parreturn cell.Si tu retournes autre choseque le cell,tu ne pourras pasenchaîner sur une autre méthodeavec le return cell.
00:41:37 :D'accord.Ça porte un nom,cette technique ?Alors,oui,ça a un nom.C'est undesign pattern.Ça n'existe pas qu'en Python.Ça existe dans tous les langagesquasiment.
00:41:52 :C'est l'un des premierspatrons de conception.Est-ce que vous avezdéjà entendu parler de ça ?Oui,j'ai entendu.Le gang des quatre,c'est ça ?
00:42:05 :Voilà,c'est ça.Parce que le design pattern,il y en a...Là,c'est le design patternbuilder ou monteur.Ah,d'accord.Builder,ok.Parce que justement,je vais regarder çatrès bientôt,mais du coup,je pourraisfaire le lienavec ce que tu viensde montrer, quoi.
00:42:29 :Ok,ça marche.Voilà,tu peux goûter un petit avant-goût.Oui,parfait.Là,typiquement,c'est quelque chosequi est utilisé pourconstruire un objet,donc on saitpar avance qu'il y auradifférentes options,que toutes les optionsne seront pas validées,d'accord ?
00:42:46 :Au lieu d'avoir un objetqui s'initialisetout de suiteavecdixarguments,vous gardez queles arguments essentielset tous les autres,vous les mettez en optionnelscomme ça.
00:43:00 :Parce que là,techniquement,si on reprend le truc,ici.Alors,hop,je vais revenirplutôt sur l'exemplede base.Non,mais,ouais,il ne l'a pasprinté,la modif,là.
00:43:20 :Quelle modif ?Si tu faisun ctrl zpour revenir en arrièresur ton print,bonjour,ton print variable,ouais,voilà.En fait,tu m'as demandéde défier les Opar des A.
00:43:34 :Ouais.Il apparaît oùdans le terminal en dessous ?Il n'apparaît pas,parce qu'il me renvoieque l'objet final.Justement,c'est là que je vais en venir.
00:43:42 :Ah,d'accord,ok.Là,il me créeun premier objet,d'accord ?D'accord.À cet objet-là,il appliquecette méthode-làet cet ensemble-làle renvoie à mon objetmodifié.
00:43:56 :Et comme ça,ça représenteun nouvel objet,cette méthode-làva s'appliquerà cet objet-làet du coup,l'ensemblele renvoieà un objetqui est cet objetici.
00:44:08 :Donc,il vaappliquercette méthode-làà cet objet-làet du coup,l'ensemblele renvoieà un objetqui est cet objetici.Donc,il vaAh oui,d'accord,oui,attends pour moi,oui,oui,oui,j'ai pas vu que t'avais inverséle O et le A.
00:44:31 :Si je te fais ça maintenant,je pense que ça va te faireêtre suffisant.Ouais,merci.Voilà.Donc,en fait,c'est le faitque vous pouvez fairedes répétitions,c'est que le self,c'est ce qu'on a vul'autre foisavec les méthodes,avec le,on avait faitle self en soi,
00:44:51 :ça représentel'objetqui appartientà la méthode.Oui,oui,c'est ça,voilà.Et donc,en faisant un simplereturn self,on renvoie l'objetet comme c'est l'objetqui appartient à la classe,qui est une,une,comment,une instancede la classe,et bien,il possèdetoutes ces méthodes,ok,
00:45:16 :et du coup,on peut lui appliquerune nouvelle méthode.Et ça nous permetd'enchaîner.Voilà,ça c'est quelque chosequi vous serviratrès,très probablement,parce que lorsque,dans un scriptou un programme,vous devrez créerdes objetsun peu complexeset qu'il y aurades optionsen fonction
00:45:39 :de telle ou telle situation,ça typiquement,vous pourrez l'utiliser,ça vous permettravraiment d'avoirquelque chosed'assez réactifet assez modulairepour créer vos différentscas d'utilisation.
00:45:49 :Ouais,ouais,c'est bien.Ouais,ouais,ouais,ouais,c'est bien,c'est bien.Voilà,voilà.C'est évidentde faire courirdes tas de paramètres,enfin,d'arguments.Voilà.
00:46:06 :Ça marche.Impeccable.Merci,Stéphane,c'est bien ça.Voilà,voilà.Je savais ça,je vous avais ditpeut-êtrequ'à un petit moment,je savais que ça allaitvous plaire.
00:46:19 :Ah oui,je suis fan.Alors,n'oubliez pas quand mêmele nom d'Angry,ça,c'est une petite,une petite choseà connaître quand même.Je ne vous le dirai pastous les jours,mais c'est à connaîtrequand même.
00:46:32 :Comment ça s'écrit,ce que tu dis là,ce que tu as faiten première partie ?Voilà.D'accord,d'accord,d'accord,d'accord,d'accord,d'accord,d'accord,d'accord,d'accord,d'accord.
00:46:47 :Alors,n'hésitez pas à allervous lui commenter,ça va un peu plus loinque ça.L'idée,c'était vraimentde vous en faireune présentation rapide.
00:46:56 :On pourrait passerdeux heures dessussans difficulté.Bon,le but,ce n'était pasde vous casser la têteparce que le nomd'Angry,c'est quand mêmeassez particuliercomme conceptet c'est assez chaudà appréhender.
00:47:10 :Je ne vous cache pasque mêmeles gens quiont faitJe ne vous cache pasque même là,pour ce soir,il a fallu que je revoyeun peu mes gammesparce que je savaisce que c'était,je savais en grosde quoi on parlaitmais je ne les utilise pas
00:47:25 :à 200%parce que je ne les utilisepas tous les jours.Après,en même temps,je ne suis pas sûrque les gensqui passentderrière quelqu'unqui a utilisé ça,je ne suis pas sûrque ça devienneun copain.
00:47:38 :Après,c'est une bonne raisonen fait.Oui,oui,parce qu'on utilisedes subtilitésen profondeur.Moi,je vois ça comme ça.Du coup,les personnesqui passentderrière,ouais,merci,c'est cool.
00:47:55 :Alors là,par exemple,typiquement,dans ce qu'on vientde faire,on pourrait direque cette place-là,on va en hériter ailleurset on pourrait,par exemple,déciderdene pasutilisercette place-làparce queon va essayerde garderune méthodequi renvoiela marquequ'elle criepar défaut
00:48:18 :pour pouvoirs'y référencerpar la suite.Là,on pourrait utiliserdes manguines,ce qui faitqu'on gardequand mêmedes valeursde,ça s'appliqueaussi bienaux attributspour fonction,aux méthodes,pardon,maisça pourrait permettreaussi de,par exemple,de sauvegarderune harmonie.
00:48:41 :Là,comme ça,je n'ai pas un exempleprécis qui vienten tête,mais ça peut avoirson utilité.De toute façon,si ça existeen Python,c'est que c'est utile.
00:48:52 :Voilà,voilà.Est-ceque vous avezdes petites questionssur tout ça ?Des questions,non,mais des perspectivesd'utilisationpour la deuxième partie,oui,c'est bien.
00:49:05 :J'imagine,celui-là,c'est bien,oui.C'est bienparce qu'en même temps,c'est vraique ça démystifiele coup du bonjourque tu as faità la fin,c'est vraiqu'on enchaîne çaavec des splits,des machins,des trucs,quand on faitdu parsing,par exemple,maissous le capot,on ne sait pas
00:49:27 :comment ça marche,mais là,maintenant,ça donne une idéede comment ça marche.Merci.D'ailleurs,maintenant,quand vous avezdes questions,vous pouvezd'ailleurs,maintenant,quand vous avezuncomment,une méthodeou un moduleque vous utilisezdans Python,si vous vous demandezsi vous pouvez faire ça,donc,
00:49:50 :en anglais,c'estméthodefluent.Si vous voulez voirque vous avezdes méthodesfluentdans votremodule,vous pouvezrapidementaller voirle moduleet les classes,voir les différentesméthodeset vous verreztout de suitesi à la fin,vous avez l'impressionde se direah,ok,ça c'est des méthodes
00:50:15 :que je peux enchaîner.D'accord.Ça peut vous permettreaussi de devinercomment vous allezpouvoir utiliservotre modulepour savoir ce que çaveut dire.
00:50:24 :Donc,là,ça,on le retrouvedans la définitiondu module,ça ?Oui.Sous le nomfluent,c'est ça ?Commentça s'appelle?C'estle fluentméthode.
00:50:41 :Ah,d'accord,ok.Là,par exemple,je vais essayerde faire ça,on va voirsi j'arriveà y accéder.Hop.Normalement,si je fais çaà atteindrela définition,voilà.
00:50:57 :Alors,on vay regarder.Bah,si tu faisun contrôle ffluent,tu vas retrouver ?Ah,oui,après,il faut que tu aillesvoir dedans.
00:51:10 :Oui,d'accord.Ok.Alors,l'interface,on va allervoir ça.On va naviguer.Alors,là,on vaallervoirça.Donc,on vaallervoirça.
00:51:29 :Alors,on vaallervoirça.Alors,non,c'est avecl'overloadde l'intérêtstring.Ok.Donc,quelque chosecomme çapour revenirdedans.Alors,on vanaviguer.
00:51:49 :Vous voyez,vous avezbesoinde çaaussi.Ah,c'est dommaged'entendredusépiton.Donc,on vanaviguerdanslapartiedel'intérêtstring.Alors,on vaallervoirça.
00:52:13 :Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Ok.Donc,vous avezlesdifférentesméthodesdesclasses.
00:52:39 :Vous allezretrouver surReturnSafeleprincipel'ingèreur.Donc,ce qui nouspermettrade savoirque vouspouvezenchaînerlesdifférentesméthodes.Ok.Impeccable.On vaessayersur celui-là.
00:53:00 :Peut-êtreon vavoir ladéfinition.C'estPython,parce quec'estPython.Alors,on vaimporterletime.Çava.Alors,onvaallerdanslapartiedel'intérêtstring.
00:53:27 :Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.
00:53:54 :Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.
00:54:22 :Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.
00:54:49 :Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.
00:55:16 :Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.
00:55:43 :Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.
00:56:10 :Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.
00:56:37 :Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.
00:57:35 :Alors,on vaallerdanslapartiedel'intérêtstring.Donc,on vaallerdanslapartiedel'intérêtstring.Alors,on vaallerdanslapartiedel'intérêtstring.
Aucune occurrence trouvée pour « ».