Session du 08 octobre 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
Découvrir les classes et l’héritage Python
Introduction progressive aux fonctions puis aux classes en Python, avec focus sur les paramètres, valeurs par défaut et bases de la programmation orientée objet.
00:00:00 :Bonsoir à tous, ce soir petit mentorat comme toutes les semaines, j'ai décidé de se parlerd'un sujet de soir, on va parler un petit peu des classes, de ce qui va un petit peu autour,à ce que ma Python répète souvent à l'envie, c'est un langage de proclamation orienté objet,
00:00:27 :et tout le cœur de cette orientation objet, elle tourne beaucoup autour des classes,donc on va voir un petit peu, faire cette découverte, voir des rappels pour certains,sur les classes en Python. Est-ce que c'est bon pour tout le monde ? Vous avez déjà plus ou
00:00:47 :moins abordé le sujet ? Pour moi oui. Donc on va repartir déjà, avant de parler à proprement desclasses, on va repartir à la base, alors est-ce qu'au niveau de l'affichage c'est suffisammentgros ou est-ce que vous voulez que je mette un peu plus gros ? Un peu plus gros, un tout petit peu.
00:01:13 :Hop, et voilà. Donc on va repartir tout bêtement, déjà la première notion que vous voyez en Pythonassez vite, ce sont les fonctions. Donc la fonction pour mémoire, comment elle se compose ? Tout
00:01:37 :d'abord elle a son nom, d'accord, avec le mot clé d'air. Ici on peut passer déjà plus loin,donc je ne sais pas, on va faire quelque chose de très simple. Donc on peut passer à un paramètre,
00:01:52 :et on va par exemple, voilà, print, on peut soit effectuer une action, d'accord, soit retournerune valeur, par exemple valeur. Donc on peut faire l'un ou l'autre, ou les deux, pas de difficulté.
00:02:13 :Tout ce qu'on a à l'intérieur, donc ça peut être soit une simple action comme un print, ça peut êtreun calcul, ça peut être une modification du paramètre. Ici j'ai mis un seul paramètre,
00:02:25 :on peut bien entendu avoir plusieurs paramètres, et ainsi de suite. Au niveau des paramètres,il y a aussi un point qui est important, on peut par exemple donner une valeur à ce paramètre,on peut dire par exemple que par défaut le prénom est égal à Jean.
00:02:44 :Alors, comme ça, parce que sinon ça va être un peu useless, voilà. Donc,lorsque l'on définit un paramètre, d'accord, est-ce que vous connaissez la règle par rapportaux paramètres pour lesquels on précise une valeur par défaut ? Non, ça ressemble en fait
00:03:12 :au dictionnaire en fait ? Alors, là j'ai mis en premier, mais admettons que je mette nom du pont,et le prénom je mets rien. Est-ce que ça vous semble correct ? Est-ce que pour vous ça peut
00:03:40 :fonctionner à partir du moment où j'ai utilisé ma fonction sur ce panneau-là,ma fonction prénom égal à Jean, par exemple. Est-ce que ça vous semble correct ? Vu que c'est
00:03:53 :souligné en rouge par le VS Code, ça ne doit pas être correct, du coup ? C'est embêtant,le VS Code me coupe mes essais. En fait, la règle, c'est que lorsqu'on met un argument,
00:04:12 :soit, enfin un paramètre, soit le paramètre peut prendre l'intentielle valeur, donc on varéviser ça correctement, et auquel cas il est placé en premier. Alors, quand je dis en premier,
00:04:30 :attention, je pourrais très bien faire nom-prénom, ici utiliser le prénom et ensuite le nom,d'accord ? De ce point de vue-là, ma fonction reste correcte. Je pourrais très bien faire ça
00:04:51 :aussi. Là, l'ordre des places n'a strictement aucune importance. Par contre, dès que vous avezun argument auquel vous mettez une valeur par défaut, il faut absolument qu'il se trouve àla fin des arguments. Donc, si je rajoutais ici H égale 35, par exemple, c'est correct. Mais,
00:05:24 :à partir du moment où on a des arguments qui ont des valeurs par défaut, même chose,tant qu'ils sont tous situés à la fin, on peut également les mettre dans un torse long. On n'est
00:05:36 :pas obligé de respecter un ordre. Python supporte très bien le fait que les arguments soient un petitpeu mélangés. À l'exception, bien sûr, des arguments qui ont une valeur définie par défaut,
00:05:47 :qui peuvent être tous vers la fin. Mais, par type d'argument, de paramètre, s'ils sont mélangésentre ceux qui n'ont pas de valeur par défaut et ceux qui ont une valeur par défaut, Python l'acceptetrès bien. Ça ne pose aucune difficulté, d'accord ? Donc, voilà un petit peu comment se présente
00:06:06 :une fonction. Maintenant, on va voir la classe. La première différence, bien entendu, c'est lemot clé. Là, pour rentrer les différents paramètres, vous voyez, on retrouve ici le
00:06:41 :même ordre. Parce que pour avoir les paramètres d'une classe, ce ne sont plus des paramètres,à ce moment-là on appelle ça des attributs, il faut d'abord créer une fonction dans laquelleon va donner ces attributs, d'accord ? Là, dans ma fonction, j'avais mis le prénom, âge,
00:07:02 :et ainsi de suite, et j'avais joué avec les différents paramètres, un peu comme vous l'entendezau sein de ma fonction. Pour la classe, les attributs, ce qui pourrait se rapprocher des
00:07:13 :paramètres d'une fonction, il va falloir les introduire dans une fonction spéciale quis'appelle le Unit, dans lequel on va rentrer les différents attributs, ou paramètres si vouspréférez, qui vont définir la classe. Là, on voit un paramètre qui est apparu supplémentaire. Je
00:07:36 :pense que vous avez tous repéré lequel. Oui, le Self. Est-ce que vous savez à quoi correspond ceSelf ? Le Self, déjà, il peut être nommé n'importe comment, et il sert à appeler en gros,
00:07:55 :à appeler la classe. Self, c'est pour dire lui-même, pour dire la classe elle-même.C'est presque ça. C'est une instance. Le Self, c'est, voilà, le Self représente l'instance,
00:08:09 :pas la classe, en elle-même. D'accord ? Et comme l'a dit très justement Thomas,il peut s'appeler n'importe comment. Alors, par définition, et je pense que vous verrez très,
00:08:22 :très, très peu de codes où il ne s'appelle pas comme ça, parce que tout le monde apprend avecle mot Self, et tout le monde continue avec le mot Self, mais il pourrait très bien choisirn'importe quel autre mot. Je pourrais, par exemple, appeler, allez, on va aller dans le
00:08:40 :iPhone. Excusez-moi un petit instant, j'ai une modification sur le disque-là, je vois si c'estquelqu'un qui n'arrive pas à rejoindre. Non, c'est bon. Ok. Donc, je reprends, excusez-moi,
00:09:05 :je pourrais très bien, par exemple, appeler concombre. Boum, boum, ça marche pareil.Bon, là, j'ai eu un petit warning de mon client qui me dit, généralement on utilise Self, alorspourquoi tu n'utilises pas le même paramètre que les autres ? D'accord ? Mais techniquement,
00:09:36 :alors je vais faire comme ça pour vous montrer que ça ne pose aucun souci. Je vais faire,allez, mentor 1 égal, voilà, et on va utiliser la fonction. Je sauvegarde, je lance le script.
00:09:54 :Vous voyez, je n'ai aucune erreur. Même que j'ai utilisé concombre plutôt qu'utiliser Self.D'accord ? Donc, le Self, c'est vraiment une convention de nommage que tout le monde
00:10:11 :utilise, mais en soi, ça ne pose pas de difficulté de fonctionnement à Python. Donc,on va venir au Self, ce sera plus simple, voilà. Maintenant, je vous ai dit dans les fonctions
00:10:25 :qu'à partir du moment où on mettait les mêmes arguments, donc les arguments avec de valeurpar défaut, les arguments sans valeur par défaut, dans n'importe quel ordre, ça ne posait pas deproblème. Donc, si on suit cette logique, ceci, vous êtes d'accord avec moi que c'est une fonction
00:10:43 :par rapport à ce qu'on a défini jusque là ? Parce que quand je dis ça, ça pose une difficulté àquelqu'un de dire que ça, ça ressemble à une fonction puisque c'est la même définition quece que j'avais au-dessus. Non ? Non. Donc, techniquement, je devrais avoir le même
00:11:04 :comportement. On va essayer. Donc, dans ce cadre-là, le premier mot devra absolument êtrecelui qui représentera l'instance des objets que vous créez à partir de cette place. Donc,
00:11:41 :si on résume ce qu'on a vu jusque là, une fonction peut avoir des paramètres peu importel'ordre tant que les paramètres sans valeur par défaut se trouvent tous en premier et ceuxavec une valeur par défaut se trouvent en dernier. On va retrouver presque le même
00:12:00 :fonctionnement dans les fonctions qu'on va retrouver au sein des classes, sauf qu'ilfaudra toujours qu'en premier, on ait ce mot clé qui représente l'instance des objets qu'ils ontcréé à partir de cette place. D'accord ? Là, en termes de vocabulaire, vous venez de toucher des
00:12:23 :doigts. Pourquoi on appelle Python ? On dit que c'est un langage de programmation orienté objet.C'est parce que, pour ceux qui ne l'auraient pas encore vu ou touché des doigts ou expérimenté,les classes c'est le cœur de la programmation Python. A partir de maintenant, si ce n'est pas
00:12:45 :déjà commencé, vous allez écrire régulièrement, très régulièrement des classes. Vous organiserezune grande partie de vos scripts avec les classes. D'accord ? On peut faire sans,
00:12:59 :on peut rester en fonctionnant qu'avec, désolé pour l'évidence, avec des fonctions. C'estfaisable, on peut faire des scripts uniquement avec ces fonctions. Mais vous apercevrez très
00:13:13 :vite que le fait d'utiliser des classes va grandement vous simplifier la vie sur beaucoupde systèmes. D'accord ? Maintenant, je ne sais pas si vous, vous le savez, moi ça me dérange un
00:13:26 :petit peu, on utilise une fonction ici et ici on dit que c'est une fonction. Ce n'est pas trèsclair. D'accord ? C'est tout à fait normal parce qu'en fait ça ne s'appelle pas une fonction.
00:13:39 :Lorsqu'une fonction se trouve à l'intérieur d'une classe, vous savez quel nom elle prend.Une méthode.Exactement. Ça devient une méthode. Donc une classe, elle a deux éléments d'un destin particulier,
00:14:00 :des attributs et des méthodes. D'accord ? Et ça, la première méthode, la méthode limite,c'est un mot-clé de Python. On le repère, je ne sais pas si vous le saviez déjà, mais avec tous
00:14:19 :les mots qui ont deux underscores en avant et deux underscores après, c'est des mots-clés. D'accord ?Et ils appellent ça des fonctions magiques des fois. Et votre init, il devra toujours s'appeler
00:14:34 :init. D'accord ? C'est pas parce qu'il y a les deux underscores qu'il se le repère comme init.Si par exemple, je l'appelais, allez, on va rester sur le fameux, si on restait sur le fameuxcoupombre de tout à l'heure, mais calmons, ça pourrait marcher. J'écopaille l'autre urne.
00:15:01 :Vous voyez, ça ne marche pas. Parce qu'en fait, si ça ne s'appelle pas init, Python ne va pas lereconnaître comme une méthode d'initialisation. Cette méthode d'initialisation, comme vous pouvez
00:15:19 :le voir, elle peut sembler un peu inutile. Parce que si on l'analyse, on l'analyse bien, on aprénom, nom, âge et ville en paramètre. Et qu'est-ce qu'on fait derrière ? self.prénom
00:15:34 :égale prénom, self.nom égale nom, self.âge égale âge, self.ville égale ville. Ça peut paraître unpetit peu inutile. En fait, cette méthode portée à son nom, c'est une méthode d'initialisation.
00:15:48 :C'est-à-dire que ici, lorsque je crée mon objet, mon type A, je lui passe les quatre paramètres,ok ? Ces paramètres arrivent dans la méthode d'init, parce qu'ici, ce sont toujours des
00:16:05 :paramètres, et ils deviennent des attributs lorsqu'ils passent par le self, d'accord ? Ce quiveut dire, sincèrement, que si je faisais comme ceci, ça fonctionnerait exactement pareil,d'accord ? Alors, on va très souvent utiliser self.prénom égale prénom, self.nom égale nom,
00:16:45 :self.âge égale âge, self.ville égale ville. On va dire que c'est une forme de féméantise mentale,puisque on ne cherche pas à créer des noms différents pour la même chose. Après,
00:16:57 :hormis le fait de pouvoir dire « j'ai été super original », ça ne présente pas d'intérêt profond.Mais ce que je vais vous montrer là, c'est qu'on n'est pas obligé de faire self.prénom égale
00:17:09 :prénom, self.nom égale nom, self.âge égale âge. On reste libre par rapport à ça. C'est seulementquand on a fait précéder du mot self avec un nom de variable, de paramètre, ou quoi que l'onveut, que celui-ci devient un attribut de la classe, et donc un attribut de l'instance qui
00:17:30 :sera créé à partir de cette classe. Par contre, dans les méthodes suivantes, on va devoir toujoursutiliser le self, parce que sinon, cette méthode, elle ne saura pas utiliser les attributs quiexistent dans la classe. Parce que là, typiquement, on pourrait très bien imaginer que si on ne mettait
00:17:56 :pas le self, on allait aller de tous les côtés. Là, typiquement, on pourrait très bien se dire « ok, j'aicréé mes attributs là, j'ai précisé le mot self pour l'attribut, on a le nom qui est ici de l'attribut,techniquement, si je vais réutiliser ma méthode, je n'ai plus besoin du mot self, puisque ma méthode
00:18:25 :est au sein de la classe. Qu'est-ce qu'il y a dans la classe ? » Mais non. Vous devrez dans chaque méthodeutiliser le self, à une exception, mais c'est un cas particulier, je ne pense pas qu'on aura le temps dele voir ce soir, mais retenez qu'en règle générale, toutes les méthodes, vous devrez d'abord passer
00:18:40 :comme premier paramètre de votre méthode les mots self au sein d'une classe. C'est ça, cette méthode, d'accord ?On va faire plaisir à Compilote, il va être content. Hop, voilà. C'est bon, il arrête de hurler.
00:19:01 :Donc, comme je viens de vous le montrer, pour passer un argument à utiliser les attributs d'une classedans une méthode, je suis obligé d'utiliser le mot self. Donc, si, mettons, je voulais assécher le prénom,
00:19:15 :je vais remettre aussi ici le prénom parce qu'on s'y retrouve.Comment je pourrais m'y prendre pour assécher le prénom de mon objet menteur A ?
00:19:37 :Avec menteur 1 pour un prénom ?Ouais, mais du coup, je n'utilise plus mon self.Non, parce que le self, il est remplacé par un menteur.
00:20:02 :Voilà, exactement. En fait, le self, il représente l'objet que l'on va créer dans le futur quand on construit la classe.Donc ici, le self, il représente l'objet qu'on va créer dans le futur.
00:20:14 :Lorsque vous utilisez la méthode là, ce n'est pas explicitement marqué, mais là, menteur 1 pour un fichier détail,le premier paramètre qui est passé là, même s'il n'y a rien de marqué entre les parenthèses, c'est menteur 1.
00:20:32 :D'accord ? Ce qui fait que là, l'objet qu'on a créé repasse le self, et le self, quand il va chercher le point prénom,il va chercher le point prénom du menteur 1 qu'on a passé en premier paramètre.
00:20:47 :Ok ? On va faire ça.Je vais supprimer celui-là pour ne pas que ça ne le pollue trop.Voilà.Menteur 1, point prénom.Voilà. On va rester là.
00:21:12 :Je lance le script. Effectivement, il va bien retourner à 10.Et donc, pour que vous voyiez que ce sont vraiment des paramètres à part,je vais m'amuser à modifier, mettons, l'âge d'Alice.
00:21:32 :D'accord ?Alors, quel âge on pourrait lui donner, Alice ?Menteur à 2, je crois.Non, mais quel âge on pourrait lui donner, pardon ?
00:21:48 :Je ne sais pas, 25 ans ?Allez, on part sur 25.Maintenant, comment je vais faire pour changer l'âge d'Alice ?Comment on change une valeur d'une variable ?
00:22:01 :On fait menteur 1, point âge, égal, et puis on attribue la valeur.Voilà, exactement.Donc, il est inutile de recréer l'objet pour modifier la valeur.
00:22:13 :On peut, à partir du moment où il a été créé, le modifier, l'utiliser comme si c'était n'importe quelle valeur.Techniquement, alors si on voulait faire un biais très large, on pourrait imaginer,je vais vous l'instruire comme ça, sous la forme d'un dictionnaire.
00:22:33 :D'accord ?Ceux qui étaient là les semaines précédentes, on a eu les dictionnaires.On fait notre dictionnaire.Tac, voilà.Et je pourrais faire menteur dix, âge, égal 25.
00:22:56 :OK ?Le fonctionnement se rapproche énormément de ça.Hop.Et là, on va afficher l'âge, enfin, afficher les tailles, comme ça on aura tout.C'est plus simple.
00:23:18 :Voilà. Je lance ce script.Et là, on voit que Alice a bien passé à l'âge de 25 ans.Maintenant, quand on manipule les attributs comme ça, qu'est-ce qui se passe ?
00:23:37 :En fait, vous allez faire un nouvel appel à la fonction UNIX.C'est-à-dire que vous allez repasser par cette fonction UNIX, repasser tous les attributs,dont self, on va savoir que c'est menteur 1, d'accord ?
00:23:58 :On va aller rechercher dans l'objet self le prénom, le nom, l'âge pour le compte,il va prendre celui que vous lui avez donné, Paris, et il va recréer ou écraser l'objetqui existait précédemment en lui donnant cette nouvelle vente.
00:24:13 :Est-ce que ça se fait clair pour tout le monde ou est-ce que je vous ai un petit peu perdu ?En fait, c'est un peu comme pour menteur 1, il repasse sur la classe,UNIX a le même fonctionnement en fait.
00:24:29 :Voilà.D'accord.C'est comme si là on refaisait un mentorat et qu'il passait,on va faire comme ça,une idée des objets sur le code vont virer dans tous les sens, mais ce n'est pas grave.
00:24:43 :C'est comme si on faisait mentor 1,mentor,égal,mentorat,etmentor.Voilà.Il ne vire même pas, ça je suis sûr, mais peu importe.C'est un peu comme si on faisait ça en fait.
00:25:02 :D'accord ?D'accord.Ce qui se passe derrière le rigou, c'est ça.Bon.Cet aspect-là, ce n'est pas utile de le retenir,c'est bien de le comprendre aussi.
00:25:14 :Mais quand tu dis que ça repasse dans UNIX,ça voudrait dire que si on change age,ça remettrait la valeur par défaut vu qu'on ne donne pas de valeur à la ville ?
00:25:25 :Si.Parce que là tu dis mentor.age égale 25.Et comme...Alors je te remontre ce qu'il fait.C'est comme si on faisait mentor1,égal,mentorat,track,mentor.
00:25:47 :Voilà.En gros, c'est comme si on faisait ça.D'accord ?Là, tu as indiqué que age, tu dis qu'il soit égal à 25.Ouais.OK ?
00:25:57 :Donc, il repasse par là.Techniquement, comment ça se traduit ?Ici, je vais te décrire comme ça,je pense que ça ne va pas être tout clair.
00:26:06 :Comme le prénom est un paramètre obligatoire,il va passer Alice.OK ?Le nom est aussi un paramètre obligatoire,donc il va passer Dupont.Ici, pour l'âge,vu que c'est un paramètre obligatoire,il va passer 25,puisque c'est l'allure qu'on vient de lui donner.
00:26:32 :Et pour la ville, il va passer Lyon.Puisque c'est pas...On a une valeur pas définie,et pas...Je n'utilise pas l'allure par défaut pas.
00:26:40 :En gros, c'est comme s'il faisait ça.D'accord ?D'accord.À partir du moment où vous allez créer un objet,90% de ce qu'il va faire, de la vie de cet objet,va repasser par la classe.
00:27:02 :D'accord ?Par l'unique, les différentes méthodes qu'il a à l'intérieur.C'est pour ça que typiquement,admettons que vous refaisiez une classe,d'ailleurs ça existe,je vous l'annoncerai après,une classe STR,pour les chaînes de caractère,si vous n'avez pas défini la méthode upperqui permet de mettre tout en majuscule,
00:27:32 :même si votre classe s'appelle STR,qu'elle a le comportement très proche, similaire,de la classe STR qui est codée en dur dans Python,si vous ne ré-imprémentez pas la méthode upper,vous n'aurez jamais la possibilité de faire upper.
00:27:48 :Alors qu'on vous a expliqué depuis le débutque les chaînes de caractère en faisant upperça met en majuscule.D'accord ?Tout ce que votre classe,l'objet issu de votre classe,qui est une instance de votre classe,est censé pouvoir faire,doit être défini dans votre classe.
00:28:10 :Si c'est pas défini dans votre classe,vous ne savez pas le faire.Ok ?D'accord.Ok.Donc,on va aller un petit peu plus loin,parce que c'est là qu'arrive la beauté des classes.
00:28:28 :Donc,je répète rapidement,la classe, donc elle a un nom,alors le nom d'une classe sera toujours en majuscule,avec une première majuscule,ça c'est une convention de nommage.
00:28:39 :Une fonction c'est toujours près des majuscules.Ok ?On va changer de la classe mentore.On va dire que c'est une classe chien.Ok ?
00:28:53 :Alors un chien, qu'est-ce qu'on va lui mettre ?On va lui mettre un nom.Ok ?Un âge.Alors on va arrêter avec les paroles,on va faire des choses.
00:29:04 :Et,une race.D'accord ?Ok.Alors,je claque,je vais mettre,c'est rien.Ok.Ensuite on va lui créer des méthodes.Alors, un chien,qu'est-ce qu'il va faire comme méthode ?
00:29:21 :Par exemple,il va,aboyer.Ok ?On va faire les grands classiques du chien.Assis.Ok.Et,debout.Ok ?Là, c'est les grands classiques du chien.
00:29:56 :Maintenant,et puis on va faire,aussi,sinon,la race.Je vais pas manger à toi.D'accord ?Manger.Et,boire.Voilà.Ça, on a quand même couvert pas mal d'actionsde ce qu'un chien fait dans sa journée.
00:30:20 :Ok.Maintenant,on va créer,une classe,chat.Voilà, c'est classe quand même.Hop.Alors,on va faire sans limite,nom, âge, race.Pareil.Ok ?
00:30:37 :La même chose que pour le chien.Violet.Alors, assis, debout, couché, par contre.Si t'apprends ça à un chat,félicitations parce que,c'est vraiment ça.
00:30:56 :Hop.Voilà, on va lui rajouter griffé.Les chats, généralement, ça aime bien.Est-ce qu'il n'y a pas quelque chose qui vous,saute aux yeux entre ces deux classes ?
00:31:07 :Il y a des choses qu'on répète.Voilà.Alors,comment on pourra résoudre ce problème-là ?Avec l'héritage.Exactement.L'héritage,c'est ce qui va nous permettre de définir une classe,et de l'utiliser en paramètre,dans la création d'une autre classe.
00:31:32 :Donc, on va créer notre classe,parent,c'est le terme qui est utilisé,on va dire,animal.D'accord ?Hop.Voilà.Ok.Alors, en commun, on a quoi ?
00:31:49 :On a,manger.On a,boire.Et on en a un troisième en commun.Lequel ?Le mûler et aboyer,c'est un peu ce qu'il faut.
00:32:06 :On peut le mettre un peu en commun.Voilà.Donc,on va faire notre classe.Alors, nef,on a dit,manger.On a dit boire.Et,ce qu'on pourrait faire,par exemple,c'est dire,faire un bruit.
00:32:31 :Par exemple.Faire un son.Voilà.L'animal fait un son.Donc,maintenant,comment je vais fairepour mes personnes ?Je vais faire comme ça,ceci,hop ça.
00:32:44 :Voilà.Je pense que vous voyez pas trop.Chien et chat,ils vont hériterde la classe animale.Donc,qu'est-ce qu'il va se passer ?Tout dépend,on vient entre parenthèses,le nom de la classedont on veutqu'il hérite.
00:32:59 :D'accord ?Donc,il hérite.D'accord ?Et là,plutôt que de faireun def limite,on va simplement faire,on va faire notre def limite,mais ce coup-ci,au lieu de refaire nos self,nom, self,âge, etc.,
00:33:17 :puisqu'on a les mêmes attributs,on va faire un super limite.Donc,qu'est-ce que c'est ?Le super,il fait référenceà la classe animale.D'accord ?
00:33:30 :Ce qui faitqu'il va prendreles paramètresqui sont passés en limite.Il n'y a pas 100 paramètresà cette limite,mais le super limitec'est l'uniqueque l'on retrouvedans la classe parent.
00:33:44 :Ici,le supercorrespond à la classe parent.Donc,il va aller chercherdans la classe parent animalela fonction limitepour créerles attributs du chien.
00:33:57 :Schématiquement,je pourraisanimalpoint unique.Ça reviendraitexactement au même.D'accord ?Mais,alors déjà,plutôt on l'acceptetrès difficilementeton utilise toujoursle super pour ça.
00:34:22 :OK ?Comme ça,ça permet de savoirqu'on a été cherchernos attributsdans la classeparent.Du coup,on va faire pareilpour le chat.
00:34:33 :Jeter l'animalet on va transformernotre définitensuperlimite.OK ?Donc déjà,dans les limitesde nos deux classes enfants,on a quand même gagnépas mal de choses.
00:34:53 :Ensuite,du coup,nos fonctionsboire et manger,que ça soit dans le chienou dans le chat,on trouve la même composition.On est bien d'accord ?
00:35:05 :Oui.Donc, qu'est-ce que je vais faire ?Je vais tout bêtementles supprimer.Pourquoi ?Parce que tout simplement,le faitque ces deux classes-làexistentdans animal,elles existentautomatiquementdans les classesqui héritentde la classe animale.
00:35:32 :Je vais faire çarapidement.Normalement,ça va marcher.On va créerMédor.Voilà.Et on va faireMédormangercroquette.D'accord ?On est bien d'accordquephysiquement,dans ma classe chien,je n'ai plusde méthode manger.
00:36:07 :On est bien d'accord ?On va faire Félix.Et on va les faireboire les.Même chose,on n'a pas la fonctionboire.Voyons voirce qui se passe.
00:36:23 :Impeccable.On a bien Rexmange croquette,Félix boit les.Ok ?Donc, les méthodesexistent bien dans les classeschien et chat,simplement du faitqu'elles existentdans la classe animale.
00:36:40 :Ok ?Ce qui est écritdans les classes enfants,c'est juste du rajoutà la classe parent.Voilà.Je vais supprimerles petites méthodesspécifiques que j'avais mispour chaque animalhistoire que ce soitun peu plus visiblepour vous.
00:36:56 :Ok ?Maintenant,on a la classefaire un son.D'accord ?Et nous,à la base,on avait ditaboyer.Et on avait ditignorer.
00:37:11 :Donc,ce qu'on va faire,on va rendre déjànotre méthodefaire un sonun peu plus générique.On va lui passerun argument son.D'accord ?
00:37:23 :Par défaut,on met une valeur.Et on va prendrecelui-là.Hop !On va même faire çaparce que vous allez voirjusqu'où va la magie.
00:37:36 :Voilà.On va utiliserle nom de l'animal.Ok ?Vous remarquerezqu'ici,je n'ai pas le nomen variable.Je n'ai pas le nomen parallèle.
00:37:52 :Donc,là,ma classe aboyée,je vais la remplacerpar faire un sonqui existe biendans ma classe parent.Je vais lui passerun argument vous.
00:38:08 :Ah oui.Voilà.Etje renvoie exactementce qui est marquédans la pièce.Alors,je pourrais,par exemple,décider quelà,on avait misfait un son.
00:38:35 :Je peux modifieren 10.D'accord ?On va faire pareilpour le chat.Voilà.On vales lancer ici.Voilà.J'enregistre tout ça.Je lance ma fonction.
00:38:58 :On a bien les bons nomset les bons sonsqui ressortent.Ok ?Ok.Mais là,la définitionfaire un sondans la classe parent,elle ne sert à rien,là, du coup.
00:39:14 :Du coup,on définit complètementdans chaque classe.Si on enlèvela définitiondans la classe parent,elle ne sert à rien.À part s'il est animal,il n'y a pas...
00:39:23 :Alors,est-ce que tu connais...Je vais te montrerle cas d'usagetypique.Est-ce que tu connaisle nomdu sonqu'élèvele caméléon ?Non ?
00:39:43 :Ok.J'avoue que moi non plus.Ok.J'avoue que moi non plus.Alors maintenant,si je fais une classecaméléon.Ok.Mal.Bonne limite.Ok.Par contre,le son,je ne sais pas ce que c'est.
00:40:04 :Ben voilà.J'ai créé la possibilitéde faire un caméléon.Par exemple,parce que je voulaisun caméléon,parce que je voulaiscréer, mettons,une bête fille.
00:40:15 :Créer une méthodese camoufler.Ça m'amusait.Voilà.Et...Je vais créer mon caméléon.Voilà.Et puis,je vaisimprimer.Caméléon fait un son.Voilà.Merci.
00:40:41 :C'est un peuroté.Je lancemon script.Tout se passe bien.Puisque dans ma classe parent,j'ai une méthodequi me permetd'utiliser la même choseque pour tous mes objetsde type animal,qui est prédéfinie.
00:41:03 :Donc, par temps de l'heure,soit j'ai le choix,soit je fais,comme pour chien et chat,je fais ce qu'on appelleune surcharge.C'est-à-dire que je reprendsla méthode d'originepour l'adapter au cas spécifiquede mon chien.
00:41:18 :D'accord ?Soit je l'utilise telle qu'elle est,parce qu'elle me va bien,et à ce moment-là,je n'ai pas besoinde la redéfinirdans ma classe animale,dans ma classe camélion,par exemple.
00:41:31 :Ce qui fait que,par temps de l'heure,j'ai une classe...Alors, j'ai supprimé ce script.Comme j'ai mis gros,ça ne fait pas très vite pour moi.
00:41:41 :J'ai ma classe animale de base,qui me permet de créern'importe quel animalqui peut exister sur Terre.Je n'ai pas besoinde connaître strictementtous les animaux.
00:41:53 :Je peux les utilisersans forcément en connaîtretoutes les particularités.Mais, par exemple,je voulais,parce que dans le cadrede mon programme,ça m'intéressaitcréer un camélionqui pouvait se camoufler,même sans connaître le son,je peux le faireparce que je n'ai pas besoinde connaître la diffusion
00:42:10 :pour faire un son.Et si je veux direque tous les animaux,par exemple, émettent un son,là, je ne suis pas embêtéparce que dans mon camélion,j'ai quand même une fonctionpar défautqui me permetd'émettre un son.
00:42:21 :Est-ce que c'est plus clairpour toi ?Alors, sur faire un son,oui, ce n'est pas hyper probant,je te l'accorde.Mais sur d'autres méthodes,ça peut être intéressant.
00:42:36 :C'est-à-dire que,typiquement,j'essaie d'être encore plus clair,tu crées des sons,tu as prévu dans ton programmede créer une dizainede types d'animaux.D'accord ?
00:42:59 :Parmi tous ces animaux,tu as neuf poissonset un oiseau.Ok ?Eh bien,tu vas créer,dans ce contexte-là,ici,une méthoded'être,se déplacer.
00:43:25 :Et tu vas mettre ça dedans.Voilà.Nageà une vitesse X.Ok ?Donc, pour tes neuf poissons,tu n'auras absolument pas besoinde te surcharger,t'as qu'à se déplacer.
00:43:42 :D'accord ?Par contre,pour ton oiseau,tu pourras la surchargeret dire à la place de nage,vole.Ce qui fait qu'au lieu d'écrireneuf foisune méthode se déplacer,nage,et une fois une méthode,vole,tu auras eu à écrire dans ton scriptune seule fois la méthode,
00:44:01 :vole.Et une fois la méthode,se déplacer,nage.Est-ce que tu sais l'intérêt,Thomas ?Oui.Au niveau de,après au niveau de la surcharge,j'ai moins l'intérêt,je la trouve plus intéressantequand on a des,quand il faut utiliser une partieet qu'on rajoute sur la,sur la fonction des choses
00:44:28 :qu'on a besoin,spécifiquement pour la classe enfant.Oui, alors après,ça peut être une forme d'utilisation.Maintenant,tu verras quedans beaucoup de cas,en programmation,l'héritage et la surchargevont être utiliséscomme je te les définis.
00:44:46 :Pourquoi ?Ça permet tout simplementde définir une matrice de base.D'accord ?Bon, là, ce soir,on n'aura pas le temps,mais je vous parleraiune prochaine foisdes classes abstraitesqui illustrent typiquementce fonctionnement-là.
00:45:00 :Ça vous permet de définirune matrice de basepour tous vos animaux.Vous dites,voilà, moi,je veux que tous les animaux,ils ont au moinsces méthodes-là.
00:45:11 :Ok ?Je définis un comportementpar défaut,parce que,au minimum,il y a un comportementpar défaut,et je n'ai pas enviede m'amuser à réécrireles méthodespour chaque type d'animalque j'ai créé.
00:45:24 :Déjà,je n'aime pas créer50 animaux,je n'ai pas enviede me recréer 50 foisles 4 méthodes.Ok ?Et je vais fairedes variantes,des surchargespour certains animauxdans des cas particuliers.
00:45:36 :L'idée derrière tout ça,c'est le paradigme mêmedu développeuret celui qui programme,c'est la fainéantise.Le drive,je ne sais pas si vous avezdéjà entendu parler du drive.
00:45:52 :C'est un principequ'on retrouvedans la thèse de Python.Non.Non ?Le drive,ça s'écrit comme ça.Et c'est pour quoi ?C'est pour« don't repeat yourself ».
00:46:04 :Ok.Une des idées majeuresqu'il y a derrière tout ça,c'est qu'on évitede répéterdu code inutile.C'est plus simplepour le mainteniret plus simplepour le gérer.
00:46:17 :Et l'avantage,c'est que si,pour continuerà répondre à ta question Thomas,si, mettons,tu faisun schéma d'actionsur tes différents objetsde type animal,parce queici,il ne faut pas oublier,c'est quetous les chienssont égalementde la classe animale.
00:46:41 :D'accord ?Puisqu'ils arriventde la classe animale.Donc, tu peux vouloirà un moment donnédéfinir une logiquepour un processqui va collerà tousles objets de type animal.
00:46:52 :Ok ?Et bien là,tu sais que tu vas retrouverdans chacundes objets de type animalexactement les mêmes méthodes.Parce qu'ils en onttous héritées.
00:47:05 :Oui, c'estl'histoire du moule.Voilà.On fait les spécificités.Voilà.Est-ce que c'est clairpour tout le mondeces histoires de classeet d'héritageet de surchargedes méthodes ?
00:47:25 :Oui.En fait,j'ai une question.C'est un peu commel'ORM de Django,pour éviterde répéterle codequand on faitdes changementsde passeportdans des méthodes,en fait.
00:47:43 :Oui, ça revientun peu à ça.Je suis à fond que Djangohérite de tousces fonctionnementsde classe.Django adoreles classes,les objets,les héritages,les surcharges.
00:47:56 :Dans Django,il y a énormémentd'héritages.Voilà.Ça hérite de machinqui hérite de machinqui hérite de machin.Voilà.Quand on remonteavec le contrôle B,des fois,il faut remonter plusieurs foispour vraiment comprendrecomment ça fonctionnedans Django.
00:48:14 :Alors, justement,avant de vous laisserpour montrer ça,je vais supprimer tout ça.On va simplifier un peu.On va se garderjuste à fonctionparce que ça va me permettrede vous montrer ce que je voulais.
00:48:28 :Ici,on va juste garder prénom.On les va juste gardercomme ça,ça va simplifiergrandement notre fonctionet ça suffira largementpour ce que je vais vous montrer.
00:48:40 :Ici,là,j'ai typé ma fonctionje vous expliquerai çaun peu plus tardparce que c'est tout mon intérêt.Ici,j'ai str.Vous voyez,regardez,c'est game chatqui a été défini.
00:49:05 :D'accord ?Et si je fais,alors,normalement,c'est un commande B.Non,c'est pas ça.Alors,je peux faire tout simple.Si je fais un clic droitatteint la définition,c'est un F12.
00:49:20 :Voilà.Je me retrouve biendans la fonction.Je me retrouve bienau sein d'une classe.D'accord ?La classe str.Qui prend un paramètrede séquence str,mais ça,c'est un peu plus avancéau sein de Python.
00:49:35 :On rentre vraimentdans le cœur des mécaniques.Et vous voyez,au sein de cette classe,on retrouvenos différentes méthodes.D'accord ?Les xalpha,xzoom,calculateur.
00:49:50 :On va retrouver,tout en bas,je pense que si on descend,on va retrouvernotre fameuse méthodecapteur.D'accord ?Et vous voyez,on va voir comment ça fonctionne.
00:50:10 :Peu importe.Vous voyez que,même les typesque vous avez,les types que l'on retrouvedans Python,finalement,ce ne sont que des classes.D'accord ?
00:50:23 :Si je fais ça,on va le mettreen int.D'accord ?Je sais que tu vas râler,mais ce n'est pas grave.Je retrouve là ma classe int,avec les différentes fonctions,certaines que vous avezpeut-être pu utiliserau préalable.
00:50:42 :Il n'y a pas grand chose.Vous voyez, en dessous,pareil,et ainsi de suite.Donc, quand je vous disaistype, par exemple,vous avez déjà utilisé çapour savoir le type d'une variable.
00:50:58 :Vous appuyez sur le typed'une variable.Vous voyez, on retrouve bienles limites.On retrouve tout.Quand je vous disaisque les classes étaientau cœur même de Python,vous voyez là,on navigue un petit peudans le code de Python.
00:51:13 :Là, on est dans les usines.On retrouve bienau milieu de tout çaque les classes.Donc,il va falloir vous familiariseravec les classesassez rapidement parce quecomme vous voyez,c'est vraiment le cœur de Python.
00:51:30 :Sans les classes,on n'est plus réellementdans du Python.Alors,comme je vous l'ai dit,oui, on peut fairedes programmes très complexes,très longsetpeut-être même très efficacesuniquement en se basantsur les fonctions.
00:51:47 :Sur certains cas,d'ailleurs,on ne va utiliser que des cliquesparce qu'on ne va pasvraiment manipulerl'objet au sens propre.Maintenant,dès que vous allez atteindreun certain niveau de complexité,je vais essayer d'appuyer surl'exemple.
00:52:04 :À l'instant,normalement,il y a peut-être ça ici.De toute façon,en Python,on voit dans la formation,ils disent tout est objet.Du coup,forcément,la phase de faire des classes,ça permet de fairenos propres objetsà nous qu'on définit.
00:52:33 :Voilà.Donc ça,c'est un petit...Peu importe,je ne fais pas de ça.C'est juste mon écran web.C'est un petit projetsur lequel j'ai peut-êtretravaillé il y a quelque temps.
00:52:48 :Donc vous voyez,quand je vous disque tout est classe,ça c'est l'affichage graphiquedu programme,par exemple.Une classe avec différentes méthodes.Si je vais dans les fonctions...
00:53:09 :Par exemple,celle-là.On retrouve encore des classes.Ok ?Alors là,typiquement,pour ceux qui connaîtraient,ça c'est une classepour lire le super blocd'un disque livre,de la partition d'un disque livrequi est formaté en Exocat.
00:53:32 :Cette classe-là,elle a pour butde lireles super blocsde la partition.Avec différentes méthodesqui permettent justementde la rendre intelligible.Ça c'est pourles blocs rouges descriptors.
00:53:48 :Alors ça c'est une data class.Je vous en parlerai aussi,mais c'est dansl'ordinateur de séance.Là c'est pourles stars-tile nodes.Les stars-tile nodes,c'est la référence,l'endroit où se trouvele fichier dans le list.
00:54:01 :Vous voyez,tout est classe.C'est de l'analysede l'écriture, ça.Ça c'est le disque.Celui-là,je ne me trompe pasparce que ça fait longtempsque je n'ai pas travaillésur ce projet.
00:54:15 :En finalité,si je me souviens bien,il renvoie le chemindu disque de lire.Il faut savoircomment il est composé.Il faut savoirquel type de partition c'est.
00:54:28 :Alors tac, tac, tac,tac, tac, tac,ouais c'est ça.Ça impressionne encore.Vous pouvez me diretrès vite à ça.Là je crois,là c'est plusun drapeurpour aller lireles données dans le disque de lire.
00:54:50 :Donc voilà.Le but de tout ça,c'est surtout de vous montrerque vous voyez,là par exemple,je suis sur une des fonctions.Parce que là,par exemple,c'est un module outil.
00:55:09 :Donc l'idée,c'est d'avoirdes différents outilsdans un modulepour pouvoir l'utiliserau travers de libéronspour les différentes classes.Pour ne pas te faire un héritage,j'ai choisi de faire comme ça.
00:55:22 :Là pareil,là c'est pour retrouvertous les fichiers.On retrouve encore des classes.Vous voyez ce que je voulais dire,vraiment,on retrouve des classes partout.
00:55:31 :Ok ?Tout en vous montrant que ici,des choses qui sont misdans les fonctionsà la place de marquer20 lignes de fonctions.On a 3 lignes de classeset du coup,le code,il est beaucoup plus simplepour nous.
00:55:48 :Voilà.Aussi bien pour la personnequi le litque pour nous qui l'écrivonset ça évite les erreurs.Voilà.Après,on peut vraiment créerdes classes pour tout.
00:55:59 :Là,j'avais besoin de fairedes outils pour le systèmede fichier VTRFS.Moi,j'ai fait une classeexprès avec les outils.Ce qui fait qu'après,dans mes autres classeset machin,on va voir là.
00:56:10 :Est-ce qu'on va l'utiliser ?J'ai dû l'importer ailleurs.Ça n'a plus tout le fichier.Là, par exemple,vous voyez,Red Byte.C'est une classeque j'ai atteinte de définition,que j'ai crééedans un module communqui me permetde lireles bytes qui sontsur les disques du remède
00:56:46 :en fonctiondes différents typesde séries de bytesque je peux retrouver.Là, j'ai créé une classeoù j'ai définitous les cas d'usageque je pouvais retrouver.
00:56:57 :D'accord ?Et du coup,je l'importeJe l'importe.Je l'importe ici.Fonction utilitairecomme un Red Byte.Et ça me permet, après,de la réutiliserlorsque je lisdes parties du disque du remède.
00:57:19 :Là, je sais que c'estle LE64,donc j'utiliserai le Byteet la méthode du LE64pour lireet obtenir cette valeur.Voilà.Ok ?Ok.
00:57:38 :Quand je vous disque tout est classe,c'est vraimenttout est classe dans Python.Est-ce que vous avezencore des questionspar rapport à tout ça ?
00:57:53 :Non, pas pour moi.Donc, c'est bon.Comme pour beaucoupde fonctionset de notions Python,je répète toujoursla même chose.Manitez,utilisez,tordez le conceptdans tous les sensque vous pouvez.
Aucune occurrence trouvée pour « ».