Session du 04 mars 2025 à 21h00
TOSA & Certifications
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
Session de mentorat TOSA
Session de mentorat TOSA: On s'intéresse à ce mot mystérieux qu'est self !
00:00:00 :C'est parti, c'enregistre.Bon, alors encore une fois, bonsoir à tous.Alors pour ceux que je n'ai pas l'habitude de voir, vous n'hésitez pas là au cours de la présentation.
00:00:13 :Si vous avez une question ou autre, vous m'interrompez, vous me posez la question directement.L'important c'est que vous compreniez bien ce que je vais essayer de vous montrer.
00:00:21 :Donc s'il y a le moins de petits trucs qui ne va pas, il faut le dire de suite,comme ça, ça vous évitera d'être perdu, donc ne vous hésitez pas.
00:00:28 :Donc comme je le disais tout à l'heure, ce soir, on va s'intéresser plus particulièrement au cas de self.Alors je vais basculer directement sur mon Visual Studio Code pour vous montrer ça.
00:00:41 :Hop là, normalement là vous avez mon écran, et voilà.Donc le self, est-ce que pour la plupart, vous avez déjà plus ou moins attaqué la programmation orientée objet,que les classes et les fonctions ?
00:00:58 :Oui.Oui, c'est bon ?Oui.Alors, je vais commencer par définir une petite classe.Je vais rester sur un exemple que vous avez peut-être déjà vu.
00:01:11 :On va faire une petite classe voiture.Normalement ça marche bien.Voilà.Et tiens, je vais prendre ce que me propose Copilot.C'est très bien.Donc, ça c'est une petite classe voiture, donc vous avez déjà plus ou moins vu le sujet.
00:01:29 :Si je veux créer une voiture, donc je vais créer ma voiture 1.Hop là.On va dire par exemple que c'est une voiture rouge, une Peugeot.
00:01:38 :Ok.En utilisant ma méthode affichée.J'ai bien la phrase site affiche.Est-ce qu'en taille de caractère ça va ou vous voulez que je vous monte un petit peu ?
00:01:47 :Non, pour moi ça va.Ça va.C'est bon pour tout le monde ?Ça va.Donc on voit bien, il nous a bien écrit la voiture est de couleur rouge et de marque Peugeot.
00:01:58 :Ce qui correspond bien à nos self-couleurs dans la phrase ici et self-marques ici.Ok.Donc maintenant, comme vous avez pu le remarquer, il y a toujours partout ce petit mot self.
00:02:11 :D'accord ?Self-couleur, self-marque.Donc pour ceux que vous avez vu la présentation d'un objet,vous êtes conscient que c'est nécessaire pour pouvoir utiliser les attributs d'un objet qui a été créé à partir d'une classe.
00:02:26 :Ok ?Maintenant, on va voir un petit peu à quoi sert précisément ce mot self.Donc vous voyez dans la fonction init, qui est la première fonction qu'on définit dans une classe.
00:02:37 :C'est la fonction d'initialisation.Alors pour ceux qui ne le sauraient pas, cette fonction n'a qu'un seul et unique but.Son but, c'est définir comment sera créé l'objet à partir de cette classe.
00:02:49 :Donc l'instance de cette classe.Donc dans cette fonction, on va y mettre ce fameux mot self et différents attributs qu'on voudra passer à l'objet.Alors, le mot self, c'est un mot qui est...
00:03:03 :Hop.Voilà.Salut Arcel.Le mot self, c'est un mot qui est purement arbitraire.Si, par exemple, je veux le remplacer par patate.Hop.Voilà.On va coller ça un peu partout.
00:03:23 :Là.Hop là.Voilà.Voilà.Hop là.Salut Baptiste.Hop là.Ah oui, ça ne marche pas.Je ne reprends pas ici dans la fonction.Ah oui, c'est pour ça.
00:03:56 :Oui, c'est de réfléchir.J'en ai oublié un.Voilà.Tac.Je le remplace par patate partout.Et vous voyez, ça ne change rien au fonctionnement du programme.
00:04:06 :Je vais faire un petit clir pour que ça soit plus propre.Voilà.Ça me reprend bien toujours que ma voiture est de couleur rouge et qu'elle est de marque Peugeot.
00:04:16 :Déjà, le mot self, ce n'est qu'une convention, en fait.D'accord.Excuse-moi, si tu avais mis patate pour le définit et après le self dans l'affiché.
00:04:27 :Regarde, j'ai remplacé le mot self partout par patate.Partout.Il faut le remplacer partout.Voilà.En fait, le mot self, c'est juste une convention.D'accord.
00:04:41 :Oui, mais si tu avais mis patate pour le définit et self pour l'affiché.J'aurais une erreur.Tu aurais une erreur.OK.Voilà.En fait, c'est à partir du moment où le mot qu'on a choisi qu'on va mettre dans l'init,alors je vous déconseille de faire ce que je viens de faire parce que très rapidement,
00:05:01 :ça va vous forcer une certaine gymnastique.Alors, peut-être que certains sont parfaitement capables de gérer cette gymnastique,mais ça peut vite devenir très, très compliqué.
00:05:11 :Par convention, à la base, on met self.Tout le monde utilise le mot self.Après, ce qu'il faut toujours penser, c'est la maintenance du codeet toujours vous dire que votre code, aujourd'hui, c'est vous qui l'écrivez,c'est vous qui en assurez la maintenance, c'est vous qui l'utilisez.
00:05:30 :Demain, ce que je souhaite à beaucoup d'entre vous,vous serez au sein d'une entreprise,vous travaillerez du code Python au sein de l'entreprise.Vous allez écrire une partie du code,mais c'est peut-être certains de vos collègues qui reprendront le reste de ce codeou qui assureront la gestion des tests unitaires ou la maintenance du code.
00:05:53 :C'est peut-être pas vous qui aurez même toutes ces fonctions à la fois.Et si vous utilisez un autre mot que self,le collègue qui va passer derrière vous, il ne va pas vous avoir dans son cœur,puisqu'il réfléchit qu'à chaque fois, à la place de self, vous avez utilisé patate.
00:06:08 :Il va un petit peu vous molir.Donc là, l'idée, c'était juste pour vous montrer qu'en fait,self, c'est vraiment juste une convention.Si c'était un autre mot, ça marcherait exactement de la même manière.
00:06:24 :On va remettre ça à l'habitude,parce que pour la plupart d'entre vous, ça arrête de vous faire saigner les yeux.Voilà.Voilà.Alors maintenant, ce fameux mot self, à quoi il sert ?
00:06:47 :En fait, self sert à désigner l'instance en question.D'accord ?C'est-à-dire que c'est juste un argument qui est placé làpour dire que je vais utiliser cet objet comme un argument.
00:07:15 :C'est-à-dire que vous savez très bien qu'en argument, dans toutes les fonctions,on peut très bien y passer des valeurs, comme on l'appelle là, où on peut jouer.
00:07:23 :Mais je pourrais aussi lui passer une liste, lui passer un dictionnaire,lui passer un autre objet, ça ne poserait aucun problème.Par exemple, si je faisais, hop, je vais vous faire ça pour vous montrer l'exemple.
00:07:41 :Je vais faire une classe garage, par exemple.Voilà.Self, hop.Hop.Je vais créer un attribut de classe.Cet attribut de classe voiture, il marche très bien.
00:08:00 :Je vais créer un attribut de classe voiture.Je vais mettre ici, hop.Hop là.Bonsoir.Donc, je disais, je vais passer un attribut voiture au singulieret je vais dire, par exemple, voiture.append, hop.
00:08:27 :Voiture, hop là, voilà.Hop, j'ai fait une bêtise quelque part.Qu'est-ce que j'ai fait ? Je ne vois pas.La déclaration de voiture en liste, il ne faut pas le mettre dans le unit ?
00:08:46 :Ouais, je pense qu'il faut que je le mette dans le unit.Je pensais le passer dans l'attribut de classe, mais ça n'a pas passé.Ok, ce n'est pas grave.
00:08:53 :Hop, on va le mettre là.Voilà.Et donc, par exemple, le effet là où on s'étouffe.Je vais revenir à ce qu'il m'avait mis de base.
00:09:07 :Ça marche bien, voilà.Ah oui, il y avait carrément une méthode.Voilà.Voilà.Là, j'ai une méthode ajoutée voiture et je peux très bien ajouter icimon garage, égal garage, et mon garage ajouté voiture 1.
00:09:25 :Je peux afficher, hop là, mon garage.Si je lance ça, clac, là il m'affiche la voiture 1parce que, du coup, j'ai mis pour voiture dans voiture, affiché voiture.
00:09:38 :Donc, si je crée une voiture 2,là,clac,allez, le Renault, ça serait bien, peu importe,que je mets, hop, mon garage ajouté voiture 2.
00:09:55 :Je relance.Vous voyez, il me relance bien la première voiture qu'on avait, rouge et Peugeot,et la deuxième voiture, bleu et Renault.D'accord ?Donc, en termes, tout ça pour dire qu'en termes d'arguments dans une fonction,on peut vraiment y passer tout.
00:10:12 :On peut aussi bien y passer, donc je reprends des valeurs,comme des entiers ou des chaînes de caractère, des livres, des dictionnaires,mais également des instances de classe,donc des objets qu'on a créés à partir de classe,comme paramètres.
00:10:27 :Ça ne pose absolument pas de problème.Donc, ce mot « self », en fait, ça va être l'instance.D'accord ?Alors, ça peut paraître un peu complexe,parce qu'en fait, on prévoit de passer en paramètres d'objet,donc une instance qu'on n'a pas encore finalement créée,mais qui est créée au moment, à ce moment-là.
00:10:48 :C'est-à-dire que là, on est un petit peu sur un serpent qui se mord la queue.C'est-à-dire qu'à cet instant-là,quand je crée ma voiture rouge Peugeot,je passe en même temps l'objet que je suis en train de créer comme argument.
00:11:03 :Vous voyez ?Ça, c'est ce qui se passe en arrière-plan lorsque vous lancez le truc.Donc, le « self », qui est ici dans le « init ».
00:11:10 :Alors, je vais retirer ce garage et tout ça,parce que sinon, ça ne va pas être très lisible pour vous.Tac.Voilà.On va revenir à quelque chose de plus simple.
00:11:19 :Là, c'est mieux pour vous.Donc, à l'instant où j'écris cette lignevoiture 1 égale voiture rouge Peugeot,c'est voiture 1 qui est passée à la place de « self ».
00:11:32 :D'accord ?Et du coup, c'est pour ça que...Alors, ça peut paraître au début, c'est vrai qu'à un moment,quand les gens découvrent les « data class »,bon, ils ont un petit peu tendance à utiliser les « data class »,je dirais, un petit peu par fainéantise,parce que du coup, pour mettre les attributs de la classe,
00:11:50 :avec une « data class »,on n'a plus besoin de faire « self couleur » égale couleur,« self marque » égale marque, et ainsi de suite.
00:11:55 :D'accord ?Donc là, c'est pour ça qu'on fait ça,c'est-à-dire que le « self couleur » égale couleur,techniquement, c'est comme si je marquaisvoiture 1 point couleur égale,voilà, comme on avait passé en premier arrivée, rouge.
00:12:15 :D'accord ?Donc, je vais réécrire.C'est bien l'autocomplétion, mais ça peut être vite embêtant, voilà.Vous ayez bien le parallèle, voilà.Là, on voit bien, voiture 1 remplace le « self »,il précise que l'attribut couleur est égal à rouge,donc rouge qu'on a placé, nous, dans notre argument couleur.
00:12:40 :Ok ?Est-ce que c'est à peu près clair pour tout le monde, j'espère ?Ok, oui.Et donc, je vais vous montrer la petite astuce.
00:12:50 :Excuse-moi, je n'ai pas bien compris,le voiture 1 point couleur égale rouge ?Alors là, c'est une abstraction que je te montrais, Pascal.C'est...Je le remets à l'affichage, voilà.
00:13:06 :Égale rouge, ok.Donc là, en fait, le voiture 1 qui est là,correspond au « self ».D'accord ?On ne l'a pas encore défini, voiture 1 ?
00:13:20 :Oui, mais là, c'est juste pour te montrer par rapportce qu'il se passe quand j'écris cette ligne-là, en fait.Ah, ok.Voilà.Et là, en dessous, je vais le faire pour que ça soit facile pour tous.
00:13:32 :Je vais les mettre en commentaire, après, comme ça.Marque, hop, égale Peugeot.Je vais vous les commenter pour que ça soit un peu moins...Hop là.
00:13:50 :Voilà.L'appareil voiture 1 correspond au « self ».Pour l'attribut marque de voiture 1, on lui donne la valeur Peugeot,ce qui correspond à ce qu'on fait exactement dans la ligne en dessous.
00:14:00 :Ok ?Et donc, je vais vous montrer que le « self », il peut complètement être abstrait,parce que là, cette ligne-là, notamment voiture 1.affiché,
00:14:12 :je pourrais l'écrire tout autrement.Je pourrais écrire voiture .affiché voiture 1.C'est-à-dire que là, je reprends ma classe, d'accord ?Je l'utilise, la méthode de classe « affiché ».
00:14:34 :Et pour préciser mon « self », je lui mets mon objet voiture 1.Je vais commenter cette ligne.Je relance mon script.Et vous voyez que, effectivement...
00:14:50 :Ah oui, j'ai pas... mince, j'ai fait de mes pensées.Hop là.Je commence.Vous voyez bien qu'il m'affiche bien la voiture et de couleur rouge et de marque Peugeot.
00:15:02 :Puisqu'en fait, il l'a pris comme un argument.Yes, ok.Ok ?Ah oui.Je vais vous montrer quelque chose qui va vous aider pour le débuggage.
00:15:13 :C'est comme si on lui passait le pointeur de l'objet, en fait.Voilà, exactement. C'est exactement ça.Là, si je fais ça, forcément, il va me renvoyer une erreur.
00:15:24 :Qu'est-ce qu'il marque ?« Missing while required positional argument ».Il me précise, il est gentil, « self ».Ça va ?Salut Baptiste.Et donc là, il me précise bien que c'est « self ».
00:15:41 :Donc on voit bien qu'effectivement, il a besoin de cet argument-là.Alors, lorsque je le fais sous cette forme-là, ça se fait implicitement.D'accord ?Maintenant, je vais vous montrer, modifier mon code un petit peu pour que vous voyez ça.
00:15:58 :Par exemple, hop, vitesse.Allez, ça sera très bien.Ok.Et...Je vais modifier ça, parce qu'il m'a pas mis une string.Je vais mettre ça.
00:16:18 :Je clique.Ça sera plus clair comme ça, en même sens.Hop là.Voilà.C'est propre.Voilà. Roule à tant de kilomètres. Ok.Donc là, on va commenter ça et repasser sur notre exemple de base.
00:16:54 :Hop.Salut Farid.Donc, là, si je lance mon script comme ça, il va me mettre une belle erreur.Là, il me dit qu'il manque un argument de position vitesse.
00:17:17 :D'accord ?Et en fait, vous allez me dire, « Oui, mais il me dit qu'il manque un argument,mais en fait, on a deux arguments techniquement dans la fonction ».
00:17:28 :Mais en fait, pour lui, lorsqu'il compte le nombre d'arguments qui sont nécessaires pour la méthode,comme on est dans le cas où on utilise la méthode directement depuis un objet,il ne prend pas en compte le self.
00:17:41 :Pour lui, l'argument positionnel du self est rempli.Et c'est là que vous allez avoir aussi une petite importance par rapport à l'ordre de vos arguments,puisqu'il vous parle d'arguments positionnels.
00:17:52 :C'est pour ça que je dérive un petit peu sur le cas.Si, par exemple, tac, voilà.Je vais mettre...Qu'est-ce que je pourrais mettre ?
00:18:07 :De toute façon, on ne va pas l'utiliser, c'est juste pour l'exemple.Égale 0, par exemple.Si je mets place égale 3,ils vont encore me mettre une erreur.
00:18:27 :Et là, ils me parlent toujours d'arguments positionnels qui manquent.Parce que le place n'est plus un argument positionnel, puisqu'il lui, vous avez mis un égal.
00:18:35 :Est-ce que c'est clair cette différence entre les arguments positionnels et les arguments non positionnels ?Ah oui, d'accord.Si vous définissez une valeur par défaut, c'est un argument non positionnel.
00:18:50 :Par contre, si vous ne mettez pas de valeur par défaut, c'est un argument positionnel.C'est-à-dire que l'endroit où vous l'avez mis dans votre fonction va avoir une importance.
00:18:59 :Et les arguments non positionnels, vous les mettez toujours à la fin.Vous ne pouvez pas faire ça.Si je fais ça, par exemple, vous allez voir, il va mettre une belle erreur.
00:19:14 :Voilà, c'est vitesse.Et là, je mets place égale 3 et je vais mettre 50 pour la vitesse.Donc, techniquement, ça devrait marcher.Puisque j'ai bien défini ma place en deuxième position et ma vitesse en troisième.
00:19:31 :Et là, il met qu'effectivement, il y a un problème.Parce que j'ai mis un argument positionnel à la fin au lieu de le mettre dans les premiers.
00:19:43 :Donc, le self est un argument positionnel.Il sera toujours placé au début.Et si je le fais, je vais vous montrer jusqu'où ça va.Alors, on va régler les problèmes de positionnel pour arrêter que VS Code pleure.
00:19:59 :Voilà, hop, voilà.Je vais le refaire ici avec mon voiture affichée.On va y mettre une vitesse.On va y mettre le nombre de places.
00:20:17 :D'accord.Et si je lance, il me met bien qu'effectivement, il manque un argument positionnel.Mais là, il me dit que c'est l'argument vitesse qui lui manque.
00:20:31 :Parce qu'en fait, en utilisant sa fonction, 50, c'est le premier argument.Donc, il a considéré que 50, c'était l'objet.Oui, d'accord.Oui, parce que là, on l'utilise avec la classe et non pas l'instance.
00:20:50 :Voilà.Là, je vais remettre une deuxième valeur pour essayer de tricher.D'accord.Je vais dire que 50, c'est mon premier objet.Et là, si je lance, il me dit que les objets de valeur de type entier n'ont pas d'attribut couleur.
00:21:14 :Puisqu'il a bien utilisé mon 50 à la place du self.Et si je supprime couleur, il va me mettre que c'est marque.Et si je supprime marque, vous comprenez le délire.
00:21:26 :Voilà.Et donc, si je corrige, que je remets bien ma voiture 1.Là, on revient dans le meilleur des mondes.Et tout refonctionne normalement.Donc, tout ça pour vous démontrer qu'en fait,lorsque vous lancez une méthode avec une instance de classe,donc un objet qui a été créé dans une instance,
00:21:50 :donc une instance qui persiste, je vais le corriger.Tant que vous le voyez, en fait,Python, quand il va utiliser la méthode de classe,implicitement, il va mettre votre objet comme premier argument.
00:22:07 :Et ce qui correspondra à ce fameux mot self.Ouais, ok.Est-ce que c'est clair pour tout le monde, tout ça ?Ouais, ouais. Ouais, c'est bien.
00:22:21 :Merci.Est-ce que vous avez découvert des choses, surtout ?Petit rappel.Effectivement, moi, je n'utilise jamais l'appel de classeen précisant l'instance après.Je ne fais jamais ça.
00:22:34 :Oui, alors ça, c'est vraiment extrêmement rare comme utilisation.Ouais, mais c'est bien.C'est intéressant de savoir qu'on peut le faire.On peut retrouver un code qui le fait.
00:22:45 :Et du coup, ça permet de comprendre, quoi.Alors, ça pourrait être intéressant de le fairesi, dans l'écriture de votre code,vous voulez absolument savoir en permanenceavec quelle classe vous êtes en train d'utiliser.
00:23:00 :D'accord ?Alors, je n'ai pas comme ça peut-être un exemple qui serait flagrant.Oui, ce que tu veux dire, c'est que ça commence par voiture.
00:23:13 :Donc, du coup, avec le V majuscule.Du coup, on identifie tout de suite la classe voiture.Voilà, on identifie tout de suite qu'on est en train de manipuler des voitures.
00:23:27 :Ça pourrait, par exemple, avoir son importancesi bien, je pense à un exemple que j'ai lu récemment,si vous avez plusieurs types de véhicules à traiter,des voitures, des camions, des hélicoptères, et ainsi de suite,et que vous avez fait une interface de classepour manipuler les différents types de véhicules
00:23:54 :par rapport à votre garage, par exemple.Là, ça pourrait avoir un intérêt d'utiliser la classe directementau lieu d'utiliser l'objet.Bon, là, ça peut paraître un peu abstrait et absurdeparce qu'on a utilisé toutes les notes voiture, voiture 1,mais si on reprend l'exemple de Renault,Renault fait aussi bien des voitures que des utilitaires que des caméras.
00:24:21 :Donc, effectivement, pour ceux qui sont dans les mêmes âges que moi,ça va tout de suite parler.Si j'avais appelé ma voiture la coccinelle,quand j'utilise la coccinelle pour un fichier,ou par exemple la coccinelle pour un avance,si j'avais fait une méthode avance ou autre,c'est tout de suite moins évident que je suis en train de manipuler une voiture.
00:24:48 :D'accord ?Donc, si je veux que dans mon code,ça soit évident à chaque fois que je manipule une voiture,je pourrais très bien plutôt qu'utiliser la coccinelle pour un fichier,utiliser ma méthode de classe et dire voiture.affiché, la coccinelle,
00:25:05 :et vous voyez que ça marche exactement de la même manière.D'accord ?Oui.Voilà.Le fait d'utiliser les méthodes de classe,les méthodes d'une classe,ce n'est pas des méthodes de classe, c'est des méthodes dans une classe,méthode de classe c'est autre chose,directement avec une classe,avec un objet, pardon,
00:25:29 :c'est pour simplifier l'écriture de code.D'accord ?Et c'est toute la raison d'être de ce fameux mot SEL,ça permet de savoir exactement à quelle instance de classe se réfère la méthode.
00:25:44 :Parce que là derrière tout ça, ce qu'il faut bien imaginer,c'est que j'ai un espace mémoire dans lequel j'ai la coccinelle, d'accord ?Qui est une copie de cette classe,pour laquelle ont été renseignées les valeurs couleur et marque,et qui possède la méthode affichée.
00:26:04 :Donc là, en faisant la coccinelle.affiché 50 place 3,je vais utiliser mon objet directement.En faisant voiture.affiché la coccinelle,là je lui dis, ok, tu vas utiliser une classe qui ressemble à ça,avec cette méthode,et pour avoir les valeurs de l'objet,tu vas chercher le lien qui ramène à la coccinelle.
00:26:29 :C'est clair pour tout le monde tout ça ?Oui.Donc voilà, voilà.Tout l'intérêt, la raison d'être de ce fameux mot SEL.Je le répète une fois de plus,on peut mettre n'importe quel mot,et éviter, si vous ne voulez pas que vos futurs collèguesvous portent pas vraiment dans leur cœur,
00:26:58 :parce que ça va compliquer les choses.Vous avez des questions par rapport à tout ça ?Non, c'est bien.Et donc vous voyez, je vais basculer un peu.
00:27:19 :On peut vraiment tout redéfinir dans Python, d'accord ?Je vais aller un petit peu plus loin sur les classes.Je dois changer de méthode.Voilà, je vais vous créer ça.
00:27:39 :Vous allez voir qu'on peut vraiment tout refaire.Vous connaissez tous la méthode LEN avec les listes.La méthode LEN pour avoir le nombre d'éléments contenus par la liste.
00:27:58 :Oui, oui, d'accord.C'est une méthode ou c'est une fonction ?C'est une méthode.Ah bon, ah d'accord.Ah non, c'est une fonction.Oui, c'est une fonction.
00:28:14 :Donc je vais créer une classe,il n'y a pas de pétesse parce que je n'ai pas trop d'inspiration.Je vais l'initialiser et on va dire, par exemple,allez, on va y mettre une variable x,self x égale x.
00:28:41 :Si je fais comme ça, ça ne va pas le faire.Voilà, ça ira mieux.Donc si je veux créer un objet test,je vais mettre un t égale test 10.
00:28:54 :Maintenant, vous savez que par exemple,si on veut vérifier la taille de la liste,par exemple, on voudrait savoir,ah oui, je vais faire comme ça, c'est mieux.
00:29:11 :Je vais le créer, je vais l'appeler objet.Voilà, on va faire comme ça.Appeler l'item x.Appeler l'item, voilà.Si je fais comme ça, ça va pas le faire, c'est normal.
00:29:57 :Voilà, donc un petit truc bête,je passe une liste à ma fonction.Par exemple, une liste de trois.Moi, si ça m'intéresse, par exemple, dans ma classe,je n'ai pas d'idée précise en tête de cas pratiques,mais par exemple, je veux pouvoir toujours vérifierqu'il y a au moins deux éléments dans ma liste.
00:30:22 :D'accord ?Alors, la première chose que je pourrais faire,je pourrais faire print,allez, on va faire un print,l'n, t, point, objet.L'n, un truc comme ça, test,stack, t, virgule, objet.
00:30:56 :En fait, si tu veux atteindre l'objet,il faut faire un self.Il faut faire un self calculé.Ouais, voilà.C'est pas bien d'écrire le code à la volée comme ça,on fait des bêtises.
00:31:15 :Voilà.L'n, voilà.T, point, objet.Voilà.Ça, ça marche.Voilà, on y arrive.Donc là, je récupère la longueur de mon objet,t,égal à 3,et je pourrais, par exemple,écrire une petite fonction vite fait ici,dire if l'n est supérieur ou égal à 2,puisque je veux qu'il y ait au moins deux objets dans ma liste.
00:31:44 :Print, OK.Hop.Je le fais, il me print le OK.Je vais pouvoir rajouter un else et dire print à l'écart.Voilà.Donc là, on est bien d'accord.
00:31:56 :Dans ce cas-là,si mon objet est plus de 2,il me dit que c'est bon.OK.Mais ça, on peut le coder directement dans la classe.
00:32:10 :C'est-à-dire que vous pouvez vraiment tout modifier.Vous allez voir.Je vais définir un n particulier.D'accord.Je vais dire de retourner OKsi l'n self-objet est supérieur à 2.
00:32:31 :D'accord.Sinon, KO.Et maintenant,print l'n t.Point.Objet.Hop là.Oui, merde, j'aurais pas dû faire comme ça.Je suis bête.Je vais y mettre un risque.
00:33:01 :C'est ma condition qui n'est pas bonne, en fait,de faire autrement.Voilà.Je vais juste vérifier, par exemple,qu'il y a bien des objets dans ma liste.
00:33:11 :OK.Parce que si la liste comprend des éléments,elle retourne TRUE.Sinon, elle retourne FALSE.Et là,je n'enregistre pas.Pourquoi il ne me le fait pas, ce truc-là ?
00:33:33 :Qu'est-ce que j'ai fait de mal là-dedans ?Je vais le faire comme ça, plutôt.IF.Voilà.Ça va mieux marcher comme ça.Voilà.Ma condition, je pense, n'était pas bonne.
00:33:57 :Alors, pourquoi il ne me l'a pas surchargé ?Qu'est-ce que j'ai fait comme bêtisepour qu'il ne me la surcharge pas ?Normalement, ça aurait dû me surcharger l'objet.
00:34:08 :Ça aurait dû me surcharger la méthode LEN.Tac, tac, tac.Peut-être que LEN n'est pas une méthode, justement.Ouais, bah, oui, oui.C'est parce que LEN, c'est une fonction, c'est pour ça.
00:34:24 :Alors,LEN, c'est une fonction, c'est pour ça.Je vais vous montrer avec autre chose.Bah, tu peux utiliser STR, par exemple,ou un truc comme ça.
00:34:43 :BOOL.Et comme ça, voilà.C'est ta méthode BOOLEAN, par exemple.Hop là, OK.Euh, hop.Si je print le boulet T,normalement...Ah oui, t'es pendu.
00:35:08 :Je me suis perdu, je suis en plein fail.Non, c'est bon, là.Voilà.Ouais, mais là, ça m'envoie le trou.De boule.Et ça ne me surcharge pas ma méthode.
00:35:26 :Qu'est-ce que j'ai fait ?Euh, j'ai fait une bêtise, mais je n'arrive pas à la voir.Bah, non, c'est bon,parce que ton liste,ta liste,elle a trois éléments.
00:35:41 :Donc, ton IFSAFE.AUDIO,c'est ton IFSAFE.AUDIO.Ton IFSAFE.OBJ est vrai.Donc, il retourne...Il retourne...Ah oui, ça aurait dû être écrit.OK, c'est ça que tu veux dire ?
00:35:57 :Voilà.Est-ce que ce n'est pas plutôt STR qu'il faut utiliser ?Non, je ne sais pas trop.Ouais, bah, avec STR, ça marche, quoi.Pour surcharger, il suffit de mettredeux underscore avant et deux après ?
00:36:11 :Non, alors, parce que BOOLEAN,c'est des méthodes qui sont...privées à la classe, en fait.Ah ouais, mais je sais pourquoi.Ça y est.Je sais.
00:36:23 :Voilà.Ah, oui, oui.Il faut hériter.Oui, d'accord.Parce que je n'ai pas hérité.Oui, si tu ne fais pas l'héritage de liste,la méthode LENS, tu ne l'hérites pas.
00:36:46 :Il faut vraiment la construire, quoi.Voilà.Ça devrait mieux marcher, maintenant.Je savais que je faisais une bêtise,mais je n'arrivais pas à la voir depuis tout à l'heure.
00:36:56 :Normalement...Alors, pourquoi est-ce qu'il m'envoie encore 0 ?C'est mon super qui m'embête.Pardon.Bon, je retravaillerai ça,je vous remontrerai ça plus précisément,parce que là, je me suis embrouillé l'espritet je n'arrive pas à retrouver.
00:37:21 :En plus des décorateurs,je vous prépare ça pour la semaine prochaine.Mais donc, techniquement,il y a moyen de surcharger toutes les méthodes,même celles qui existent de base.
00:37:35 :Qui fait ça ?Qu'est-ce qu'il y a ?Je ne sais pas.Il ferme, c'est pour ça.Euh...Mais techniquement,on peut surcharger même ces méthodes-là.
00:37:49 :D'ailleurs, quand on fait le str, là,parce que j'ai oublié de vous parler.Voilà.Je fais un print des objets.Ça ne peut pas marcher pour le compte.
00:38:04 :J'ai fermé la liste.Voilà.Ouais.Non.Il y a un truc que je manque,mais je n'arrive pas à voir.Et puis là,il n'est pas loin de 22 heures, Stéphane.
00:38:23 :Ah oui ?Je n'ai pas vu, là.Non, mais je veux dire,ça commence à charger le cerveau.Oui, la journée était très longue, en plus.
00:38:33 :Donc, je ne vous cache pas que c'est...Donc après,techniquement,là où je voulais en venir,c'est qu'à partir du momentoù vous avez comprisqu'avec Excel,qu'on peut le renommer comme on veut,le recharger comme on veut,on peut techniquement tout surcharger en Python.
00:38:49 :C'est-à-dire quece n'est pas parce qu'il y a une méthodeou une classe qui a été définie d'une manièrequ'on ne peut pas la personnaliser.
00:38:58 :D'accord ?C'est d'ailleurs pour çaqu'on vous déconseille très fortementde faire ceci.Hop là.Voilà.Voilà.Alors ça,extrêmement déconseillé.Parce que là,j'ai importétous les modules de datetime.
00:39:26 :D'accord ?Et si je fais, par exemple,datetimeégalemon cours,et bien là, derrière,je ne peux plus le faire.Hein ?Voilà.Là, j'ai une erreur.
00:39:51 :Vous allez dire,mais je ne comprends pasparce que j'ai bien appris datetime, machin.Mais là, vous avez surchargéla méthode datetime.Oui.On l'a transformée en chaîne de caractère.
00:40:04 :Après, je rassure,ce n'est pas permanent.Si je fais ça,là, il m'envoie bien le datetime.no.OK ?Donc, n'ayez pas peursi vous faites ce genre de petites erreursdans vos scripts à droite à gauche.
00:40:19 :Vous n'allez pas modifierle cœur de votre installation Pythonde manière irrévocable.C'est juste votre scriptqui va poser problème.Et c'est exactement pour cette raisonqu'on vous déconseilled'importer en étoile.
00:40:31 :Parce que ça va vraiment,vous prenez le risque.Si vous ne connaissez pas parfaitementtoutes les méthodeset toutes les sous-classes du module,vous allez prendre le risquede surcharger des choseset vous n'allez plus pouvoirutiliser les fonctions.
00:40:44 :Voili, voilou.Est-ce que vous avez d'autres questions ?Dans ton exemple avec le datetime,là, en fait,si on fait un import classique du datetime,ça veut dire qu'il faut respecterl'entête datetime point ce qu'on veut faire derrière.
00:41:14 :Voilà.Du coup, on impose d'avoir l'entêteavec le now.Là, ce serait datetime point datetime point now.Voilà.Ce qui est bien,surtout avec un module comme datetimequi est un gros sujet,c'est de travailler comme ça.
00:41:34 :Après, c'est un peu long à écrire.Je vous le conseille.Mais surtout au début,ça vous permetde bien appréhender le module.Comme ça, vous savez bienqu'il y a un datetime, datetime, now.
00:41:54 :Oui.Après, on peut faire un alias,import datetime as dt, par exemple.Du coup, ça raccourcit un petit peu.Alors ça, c'est possible aussi.Mais je ne suis pas fan.
00:42:07 :Ça marche, il n'y a pas de souci.Je lance le script, hop.Ça a marché de la même manière.Mais je ne suis pas fanparce que les aliases,déjà, il faut bien les choisir.
00:42:22 :Il faut être sûrqu'avec votre alias,vous n'allez pas écraser un autre...Oui, c'est un peu le même problèmeque l'étoile.Voilà.Vous n'allez pas écraser une autre sous-classeou une autre méthodeque dans les autres modulesque vous aurez importés.
00:42:38 :Oui.Donc, c'est peut-être un petit peu dangereux.Alors, il faut qu'on soit à l'enviede dire, je vais me mettre en dt,comme ça, ça me fera moins de chosesà taper à chaque fois que j'utilise datetime.
00:42:50 :Moi, je recommande fortementde passer son temps à tapertout ce qu'il y a à taperet d'éviter les heures de débug derrièreparce que si, effectivement,vous écrasez un module,une sous-classe d'un module,avec un alias,je peux vous garantirque vous allez passer des heureset des heures à débugger
00:43:13 :pour comprendre pourquoi votre scriptne refuse catégoriquement de fonctionneralors que vous avez tout bien tapé.Hum.Oui, oui.Parce qu'en dessous,si on écrit dt égale bonjour,alors c'est mort, quoi.
00:43:28 :Voilà.Ça, ou peut-être que dans un des modules,parce que là, on importe qu'un seul module,donc c'est vrai, c'est sûr,ça ne prend pas un grand risque.
00:43:37 :Maintenant, je vais essayerde vous montrer ça.Hop.Voilà.Celui-là.Là, vous voyez la liste des rapports.Oui.Alors, la possibilité de faireune mauvaise manipen faisant un aliasdans un de mes imports, là,elle est un petit peu pire.
00:44:13 :Oui.Et vous voyez là, par exemple,je fais ce que je disdans mon datetime,j'ai bien apporté datetime,timedelta, timezone,pour pouvoir les utiliser.
00:44:25 :Donc au niveau des imports,il ne faut pas hésiterà être assez expliciteet à bien tout reprendre correctement.Donc ça, c'est le,comme je disais,c'est l'avantage de Python,c'est-à-dire qu'on peut vraimenttout surcharger.
00:44:44 :Vous pouvez vraiment touttout remettreà votre source.Vous pouvez modifier toutes les modules,toutes les méthodes,toutes les classes,sans aucune difficulté.Mais,pour citer un certain Ben,à grand pouvoir,grande responsabilité.
00:45:00 :Voilà, voilà.Est-ce qu'il y a d'autres questions ?N'hésitez pas.Non, c'est bien.Je pense qu'on a fait le tour.Si vous avez des questions,n'hésitez pas.
00:45:17 :La seule question bête,c'est celle qu'on n'a pas posée,en fait.Oui.Oui, on verra peut-êtrela prochaine fois.Moi, j'ai un peu de malà voir la différenceentre surchargeret décorer.
Aucune occurrence trouvée pour « ».