Session du 24 mai 2024 à 20h00
Programmation Orientée Objet (POO)
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Comprendre les bases de la POO en Python
Révisions sur les notions de base de l'orienté objet : à quoi ça sert, comment on créer des classes, des instances, le fameux self, etc.
00:00:00 :Salut Ludo, alors oui ma petite feuille de présence, salut Mathieu,salut Mathieu, salut Claude, ah et on a réussi à voir cette fois aussi, ah non il est reparti,je ne sais pas à quel point il va y avoir du monde ce soir, généralement on les faitjeudi hier, je ne sais pas si vous aviez, d'ailleurs si vous avez vu, je n'ai pas pu
00:00:52 :y assister, on va remettre la rediffusion là sur les outils de nos codes, ça va l'airassez intéressant, un outil que je ne connaissais pas du tout perso, Codar si je me souviensbien, il y en a qui ont assisté non, ou c'était sur le Discord ? Non je n'ai pas assisté.
00:01:10 :Non, on va mettre la rediffusion là, on les enregistre aussi donc je vais les mettre surles strings aussi, là pour l'instant ils sont uniquement sur le serveur. Ils sont plus
00:01:22 :performants que les GPT ou pas ? Tu parles des outils nos codes ? Oui, il y a Copilot,il y a Python, il y a tous les GPT alternatifs quoi. Là c'est un peu différent, et puis
00:01:37 :en plus c'était un outil assez spécifique, c'était Coda si je ne me trompe pas, çaressemblait plus à un Notion, donc c'était un peu différent des IA, c'est plus pourorganiser, un peu comme Notion pour ceux qui connaissent, pour faire des Kanban boards,des documents partagés, des trucs comme ça en fait. Avec des outils d'automatisation
00:02:06 :quand même si j'ai bien compris, justement basé sur du nos code. Ok, on commence àêtre pas mal, je vous ai préparé une petite nouveauté, là vous allez me dire ce quevous en pensez pour ce soir. Je vais vous mettre ici, ça fait des mois que je veux
00:02:23 :tester, des mois voire des années que je veux tester ce truc, pour ceux qui connaissentpeut-être, qui s'appelle WooClap, et qui permet d'ajouter un petit peu d'interactivitéparce que comme vous l'avez peut-être vu aussi, j'avais posé la question sur le Discord,là on se pose pas mal de questions sur la façon dont on va faire les sessions de mentorat,
00:02:44 :on faisait beaucoup de présentations de tech un peu diverses avec Pierre-André qui peutplus faire les mentorats malheureusement, et ça pouvait être intéressant ou non,ça dépend des gens, c'était des choses un petit peu plus avancées, donc là on esten train de réfléchir un peu à la suite, j'ai eu beaucoup de retours super intéressants
00:03:05 :de tout le monde, et il y a un truc du coup comme je vous le disais que je voulais tester,que je vais, qu'on va faire, je pense que c'est un bon sujet pour le tester là surl'Orienté Objet, donc c'est ce qu'on va voir ce soir, Orienté Objet, je vérifie,
00:03:23 :il y a encore des gens qui arrivent, 3, ok, on va attendre encore une petite minute.Donc Wooclap en fait c'est un outil qui va vous permettre de, ça permet de créerde mon côté des questionnaires, donc questions choix multiples, vous allez voir il y a pasmal de choses un petit peu différentes, sur lesquelles ensuite vous pouvez de votre côté
00:03:42 :accéder dans un navigateur pour participer, donc c'est un peu plus pratique que ce qu'onfaisait des fois quand je vous posais des questions, ou vous écriviez dans le chatet c'était un petit peu désordonné, là vous allez voir que ça va être un peu plusinteractif de votre côté aussi, donc c'est un petit test, on va faire ça, puisque ce
00:04:00 :soir du coup le but c'est de reparler un petit peu d'Orienté Objet, est-ce que, tiensça d'ailleurs je crois que j'aurais pu, je vais le faire en live, je pense que je peuxsondage, voilà je peux faire un sondage. Ok, en attendant que les derniers arrivent,
00:04:15 :pour savoir à quel point vous êtes à l'aise sur l'Orienté Objet. Alors je vais fairele sondage ici, hop, en piton, alors on va dire à fond, un peu et pas du tout, okalors je vais vous partager l'URL, et où est-ce qu'il y a l'événement, ok il est
00:04:45 :là, tac, et je vais afficher, ok, alors c'est parti, donc je vous mets le lien dans le chat,donc normalement si vous accédez à cette URL, vous allez avoir, et je vais vous partagermon écran aussi, je vais le mettre de ce côté là, comme ça vous pouvez voir aussi
00:05:06 :les questions, donc tac, je vous mets ça là, hop, partager, cet écran, ok, donc,est-ce que tout le monde voit la question, est-ce qu'il y a des gens qui ont essayéd'accéder aussi, si j'ouvre ça normalement, tac j'ai les DevTools, donc normalement voilàsi vous prenez le lien vous avez accès à une page où vous devriez voir la même chose
00:05:31 :que moi mais avec la possibilité en fait de répondre aux questions, donc là cettepremière question justement, c'est un petit peu, ah bah d'ailleurs attendez, je vaisrevenir sur mon, ok mon sondage il est ici, ok, on va faire ça à la place, le sondage,voilà, donc pour voir un petit peu, hop, pour voir un petit peu, voilà, si vous actualisez
00:05:56 :la page j'imagine, je ne sais pas si vous avez, hop, cette question qui est affichée,pour répondre, hop, donc si vous revenez, je vais reprendre le lien, normalement çane va pas changer, hop, je vous le remets mais normalement c'est le même, donc si vousaccédez à cette page, normalement vous pouvez répondre, je vous dis c'est un petit test,
00:06:19 :moi ça m'affiche encore l'autre question, je ne sais pas si ça a peut-être pas enregistrél'ordre, vous avez accès à, vous voyez la question ou la même chose que moi, persoj'ai la question sur les éléments d'une classe, ouais c'est ça, ok, bon il a peut-êtrepas enregistré l'ordre, ok, ok je vais réinitialiser l'événement, ouais ok, je vais le refaire,
00:06:48 :tac, hop, ok, donc, si on refait, affiché, ok, tac, non il m'affiche toujours, ah okparce qu'il m'a déconnecté, bon ok, attendez je me reconnecte, il m'a déconnecté du truc,tac, hop, ok, désolé, connectez vous, ok, ok, on va y arriver, réinitialiser l'événement,réinitialiser, ok, il avait pas enregistré, ok, en fait je m'étais déconnecté, ok,
00:07:40 :donc, on réinitialise, ok, donc, désolé pour le petit bug, voilà, il y a encore desgens qui arrivent, ah oui c'est Hal, ok, donc, si j'affiche ça, normalement, si vous revenez,je pense que, je sais pas si le lien a changé, peut-être que le lien a changé, il me redéconnecte,
00:08:11 :bon, désolé pour les bugs, ça semble pas super bien marcher, qu'est-ce qu'il embête,bon sinon répondez moi dans le chat, est-ce que vous êtes à l'aise avec l'orienter objetou pas, ça me permettra d'orienter un petit peu la session aussi, donc, ok, je vois qu'ily a des gens qui ont répondu, donc, ok, c'est bon, ça a l'air bon, désolé, ça, donc
00:08:51 :je reviens, non, ok, c'est quand je change d'écran, ok, on a encore des gens qui arrivent,alors, moyen, pas à l'aise, idem, pas du tout, ouais c'est ça, c'est vraiment l'effetdes mots, c'est la première fois que j'utilise du coup, en fait, c'est que quand je me connecte,donc je vais revenir sur cet écran, je vais essayer de pas bouger, hop, ah non c'est ça,
00:09:22 :merde en plus, bon, leur outil, c'est une ancienne amie de Udemy en plus qui travaillaità Wooclap, ok, donc, ça a l'air de marcher, je vais pas toucher l'écran, donc vous devotre côté, vous avez, si vous revenez sur le lien que je vous ai mis, vous avez accès,
00:09:41 :donc on a pas du tout un peu, c'est bon avec le lien cette fois, alors, ok, super, merci,donc, ok, donc, super, merci beaucoup, donc désolé pour le petit problème, donc, ok,bah on va au pire essayer de répondre comme vous pouvez, si vous êtes pas trop à l'aise,
00:10:07 :on va explorer tout ça, et mon but c'est aussi de vous expliquer justement en faisant,j'ai aussi prévu nos trois petits codes à vous montrer, donc, première question ici,donc j'imagine que de votre côté ça change aussi, je m'imagine que vous avez pas besoind'actualiser la page, vous devez avoir, ouais c'est bon, ok, super, parfait, c'est bien
00:10:28 :ce que je pensais, donc, nomenclature des éléments d'une classe, donc de votre côtévous allez pouvoir nommer les différents éléments ici, donc on a, hop, et si je metrompe pas j'ai le petit stylo ici qui pratique là, donc les chiffres, le 1 ça correspondà ça ici, le 2 ça correspond à ça, le 3 ça correspond à cette chose ici, le init,
00:10:50 :ça ici, et il faut en fait nommer, comment s'appellent tous ces éléments là, doncça c'est tout cet élément ici, et le 4, le 5 c'est cet élément ici, et le 7 c'estcet élément ici. Donc là en fait on a tous les éléments de l'orienté objet, un petit
00:11:09 :peu des fonctions aussi là dans le cas du 6 et du 7, ça c'est des nomenclatures, desmots clés que vous allez retrouver en dehors aussi de l'orienté objet, mais sinon toutle reste c'est vraiment du vocabulaire qu'on va retrouver souvent et c'est très importantle vocabulaire parce que quand on parle de choses, je sais plus si j'en parle dans la
00:11:31 :formation, mais par exemple sur les attributs, les paramètres, non les paramètres et lesarguments pardon, c'est quelque chose qu'on mélange très souvent et ça peut porterà confusion, je raconte souvent une anecdote que j'avais eue dans un emploi où j'étaisjunior et justement j'avais parlé de paramètres au lieu d'arguments ou l'inverse, et la personne
00:11:55 :qui était senior à qui je parlais du coup ça avait créé pas mal de confusion parceque du coup ça n'impliquait pas le même endroit où on utilise l'un ou l'autre, vuque le paramètre et l'argument ne sont pas effectivement utilisés au même endroit,même si finalement ça se retrouve un petit peu au même endroit. Donc on va voir tout
00:12:12 :ça une fois que je vous montrerai les solutions ici. Donc est-ce que, ok résultat, je saispas s'il y a des gens qui ont déjà répondu un petit peu, je crois que normalement çadevrait s'afficher. Donc normalement il vous suffit de cliquer sur les numéros et vous
00:12:25 :pouvez rentrer à la main le nom des éléments ici. Bon après du coup, voilà, n'hésitezpas à me dire dans le chat si vous êtes complètement déjà perdu parce qu'il y adéjà beaucoup de termes donc si vous n'avez pas fait beaucoup d'orienter objet, il y apeut-être pas mal de choses que vous n'allez pas trouver. Vous êtes complètement perdu
00:12:47 :? Pour moi la question n'est pas claire en fait, je ne sais pas, c'est la nomenclaturedes éléments d'une classe. Effectivement, t'as raison, c'est peut-être pas très clair
00:13:03 :en fait, mais c'est aussi pour ça justement, comment, parce que bon là tu vois par exemplele init, bon tu pourrais me dire, tu pourrais nommer ok c'est init, mais qu'est-ce quec'est dans ce cas-ci ici ? Est-ce que c'est un objet ? Est-ce que c'est une variable ? Est-ce
00:13:19 :que c'est, qu'est-ce que ça pourrait être d'autre ? Est-ce que c'est un module, unpackage, une librairie ? Le classe voiture ici, qu'est-ce que c'est ? Cette variable
00:13:30 :ici, elle a un nom spécifique tu vois, c'est pas juste une variable. Donc tu vois chaqueélément ici a un nom un petit peu spécifique. J'essaie de pas vous donner les solutions
00:13:41 :aussi parce que sinon si je dis, c'est très facile de dire ce que c'est après en vousexpliquant, mais voilà probablement qu'il y en a quelques-uns comme le 5 ici, tu voisle Lamborghini, là encore tu vois c'est une variable, mais c'est un peu plus qu'unevariable, c'est quelque chose de spécifique dans le cas de l'orienté objet. Ok d'accord,
00:14:01 :d'accord, donc on clique sur le numéro et il nous donne l'option de saisir le… Ouaisc'est ça. Après bon, comme je vous dis, si vraiment c'est déjà un peu trop flou
00:14:12 :parce que c'est quand même une question déjà, l'idée je peux vous montrer la solutionparce qu'il y a beaucoup d'éléments ici et comme je vous disais par exemple on pourraittous dire que le pneu, la marque et la Lamborghini c'est des variables, c'est aussi des objets,tout là un peu est un objet, mais voilà ça a des noms un petit peu plus précis dans
00:14:32 :le cas de l'orienté objet. Donc on va y aller pour celle-là, hop, je vais, alorsok je vois qu'il y a des gens qui ont quand même répondu, je pensais que c'était unpeu live, mais ok. Donc là je sais pas si je peux voir les réponses, normalement, résultat,
00:14:47 :il y a 5 résultats, ok. Ok, alors attributs de classe, propriétés, paramètres, ok ahoui d'accord, donc si je clique dessus, si je clique dessus, ok. Alors, une classe, une
00:15:00 :création, le nom de la classe, déclaration de la classe, définition, attributs, variables,attributs, ouais ok, on est pas mal, constructeur, ouais, ouais, arguments, paramètres, ok donclà effectivement il y a la confusion entre l'argument et le paramètre, là j'imagineque c'est l'inverse, ouais ok, alors là c'est du coup l'inverse, là on a attributs, méthodes,
00:15:22 :attributs d'instances, instances de classe, ouais ok, bon c'est pas mal, c'est pas mal.Donc ici la bonne réponse est tout simplement assez évidente ici, donc c'était une classe,la création d'une classe effectivement, bon là ça me dit qu'il y a 0% de réponses correctes,mais il y en a qui ont été un peu plus précis effectivement, donc c'était bon quand même,
00:15:42 :création d'une classe. Là ici on a un attribut de classe effectivement, puisque là doncc'est une variable effectivement, qui est définie au niveau de la classe, donc on appelleça un attribut de classe, quand on est au niveau de l'instance avec le self ici, çava être un attribut d'instance. Là ici donc effectivement différence entre le paramètre
00:16:02 :qui est à l'intérieur de la fonction ou de la méthode, la méthode qui est ici laméthode init, qui spécifiquement dans le cas d'init effectivement on appelle ça uneméthode ou un constructeur, donc là dans ce cas-ci j'ai vu qu'il y en avait mis le constructeurdonc c'était bon aussi, et là par contre on a l'argument, donc différence entre le
00:16:21 :paramètre et l'argument, le paramètre c'est les paramètres de la fonction, moi je pensetoujours comme ça quand j'hésite entre les deux, c'est les paramètres c'est vraimentquand vous faites une fonction vous la paramétrez, vous dites voilà j'ai telle fonction quia tel nom, et entre parenthèses vous mettez les paramètres de la fonction, est-ce qu'elle
00:16:38 :va avoir, est-ce qu'elle va accepter des nombres, si elle accepte un nombre quel estle nom du nombre qu'elle va accepter, dans ce cas-ci elle va accepter une chaîne decaractère qui s'appelle marque, donc c'est les paramètres qui vont définir la fonction.
00:16:50 :Et ensuite quand on est ici, quand on va créer un élément, donc là on crée, oninstantialise la classe, donc ça c'est ça ici une instance, effectivement là encoreon pourrait dire que c'est une variable, mais plus précisément ici c'est une instancede la classe voiture, on va passer dans cette méthode init, parce que quand on crée une
00:17:11 :instance à partir d'une classe, automatiquement cette méthode init va être appelée, c'estce qu'on appelle le constructeur, ça va construire notre instance, et donc ce Lamborghiniqu'on a ici, je vais faire un petit peu de ménage dans mon, hop tout est effacé, ceLamborghini qu'on a ici, il va être donné à la marque ici, et on verra un petit peu
00:17:32 :plus tard le self, le fameux self qui mélange un petit peu tout le monde, puisque là ona deux éléments ici, le self et la marque, et pour l'instant quand on initialise notreinstance avec la classe voiture, on a qu'un seul élément, donc ça c'est parce que leself on n'a pas besoin de s'en occuper, c'est Python qui le gère automatiquement,
00:17:50 :pour ceux qui ont vu les cours et qui ont vu les petites vidéos etc ça devrait êtreassez clair, pour ceux qui l'ont pas vu ça doit être très confus pour l'instant, maison va y revenir. Donc voilà, l'argument après c'est ce qu'on passe à la fonction,
00:18:05 :donc dans ce cas-ci à la classe voiture, parce que là dans ce cas-ci on crée uneinstance, mais ce serait la même chose, c'est là où je vous disais que le paramètreet l'argument c'est quelque chose qu'on retrouve aussi en dehors de l'orienté objet,on peut enlever la classe ici, l'instance et juste être dans le cadre d'une fonction
00:18:20 :et avoir quand même ces notions de paramètre et d'argument. Donc l'argument c'est cequ'on envoie à la fonction et le paramètre reçoit ce qu'on envoie comme argument.
00:18:28 :ça va jusque là ? Et ça je le montre dans la formation de base, il y a toutes les basesde l'orienté objet. Donc je vais vous mettre le lien de la session dans laquelle j'en parle,
00:18:55 :récapitulatif de la terminologie. Donc c'est exactement tout ça qu'on a vu, attributsd'instance, attributs de classe, la méthode, l'instance elle-même, la classe, là j'avaispas mis les paramètres et arguments mais je les ai rajoutés après, et donc j'expliquetout ça dans cette vidéo et dans cette formation au complet. Ensuite, je reviens ici, donc
00:19:22 :si c'est bon pour tout on va continuer avec la suite. Donc là, question un petit peu plustricky un petit peu ou pas, on va voir en fonction de la réponse, ça va faire échoun petit peu aussi à ce qu'on avait vu pour ceux qui ont vu les dernières sessions de
00:19:39 :Mentora notamment sur le Tosa. Tiens d'ailleurs je vais en profiter pour vous donner la petitefeuille de présence et je vais vous répondre aussi à une question qu'on m'avait poséela semaine dernière entre les 7 et les tuples, faut pas que j'oublie. Donc là la petite
00:19:51 :feuille de présence c'est juste pour ceux qui sont dans le programme Tosa, je vous aimis le lien pour l'assigner, si vous savez pas de quoi je parle c'est que vous êtesprobablement pas dans le Tosa, ceux qui savent vous pouvez aller l'assigner. Et sinon,
00:20:03 :donc voilà, combien y a-t-il d'instances de voiture dans ce code ? Donc là on a uneclasse très simple, voiture, avec un constructeur init qui fait rien, je l'ai juste mis commeça, et on crée donc voiture1 et voiture2 à partir de voiture et donc combien y a-t-ild'instances de voiture dans ce code ? Donc là je crois que vous pouvez répondre avec
00:20:22 :un, ouais, 55% des participants ont déjà répondu. Je crois que là vous avez un nombreà rentrer si je me souviens bien. Ok, donc, réponse fréquente 2, on a 8 personnes qui
00:20:51 :ont mis 2, une personne qui a mis 1, ok, je découvre en même temps l'outil désolé,je clique un petit peu partout. Donc on a la plupart des gens qui ont mis, ok, résultat,
00:21:03 :et là si je mets ça je peux revenir à ma question ici. Ok, donc, la bonne réponse,comment je vous affiche la bonne réponse ? Je suis perdu, résultat, ok, je peux pas
00:21:16 :voter, message, ça c'est quoi ? Vous ne pouvez plus voter, ok, ça c'est pour, etcomment je peux vous afficher la bonne réponse, je sais pas, bon je peux vous le dire, labonne réponse ici c'est une seule en fait. Donc, ok, déjà répondu, bon, c'est pas
00:21:34 :super, je m'attendais à un truc mieux pour l'interface, je dois vous dire. Ok, vote,bon, je sais pas comment l'afficher. Donc, en fait, combien y a-t-il d'instances de voiture
00:21:44 :dans ce code ? C'est pour ça que je vous fais, faut penser à faire entrer pour valider,ok. Oui, ok, donc, effectivement, faut faire attention ici, je vous disais que ça fait
00:21:56 :écho un peu à ce qu'on avait vu pour ceux qui étaient là les dernières fois. Là,y en a qu'une, parce que, donc là, y a beaucoup de choses, ça paraît simple comme question,c'est pour ceci, faut prendre le temps là dans ce genre de choses là, parce que bon,
00:22:08 :on se dit, ok, y a voiture 1, voiture 2, donc bon, y a deux variables, combien d'instancesaprès ? Bon, la question, j'avoue, est peut-être un petit peu, oui voilà, très bien Al, Albert
00:22:17 :et non pas Alain, si je me souviens bien, je dis Al parce que si je me souviens c'estAlbert, je faisais l'erreur avant. Donc oui, effectivement, si tu fais, pour ceux qui ont
00:22:27 :testé là, qui ont un interprèteur Python de leur côté là, si vous testez en faisantID, vous allez voir effectivement qu'il n'y a qu'un seul identifiant. Donc là, on a deux
00:22:37 :noms et comme je vous dis, la question peut porter à confusion aussi, combien y a-t-ild'instances de voiture ? J'aurais pu dire aussi combien y a-t-il d'objets en mémoire,
00:22:46 :là ça serait peut-être plus évident, peut-être qu'il y a des gens qui se sont trompés làdessus. Après là, effectivement, même, bon, la réponse à cette question c'est quand
00:22:53 :même qu'il n'y a qu'une seule instance. On a deux noms, on a deux noms dans la mémoire,voiture 1, voiture 2, donc si la question c'était combien a-t-on de noms dans la mémoire,là on aurait deux noms différents mais qui pointent vers un seul objet et donc une seule
00:23:06 :instance, puisque là c'est comme quand on fait, quand on avait vu dans les sessionsprécédentes là, quand on faisait une liste, liste 1 égale à une liste et qu'ensuiteliste 2 est égale à liste 1, c'est la même chose qu'on fait ici, voiture 0-1 égalevoiture 0-2 égale voiture. Donc là, quand on appelle en fait, on appelle une seule fois,
00:23:25 :je vais reprendre mon petit stylo. Ouais, il y a une personne qui a trouvé, je saispas qui mais bravo. Donc là vous voyez, en fait, ce qui peut vous mettre la puce à
00:23:36 :l'oreille aussi, c'est qu'ici on fait un seul appel en fait. Qu'est-ce qui va créer,c'est comme quand on fait, quand on fait une fonction, quand on, tous les endroitsoù on a les parenthèses, c'est vraiment quand vous faites, quand vous mettez lesparenthèses que vous allez appeler, que vous allez exécuter ce qui se passe dans ce cas-ci
00:23:54 :avec la création de l'instance, quand c'est une fonction qui va appeler le code à l'intérieurde la fonction. Si on met juste voiture par exemple, dans un interpréteur Python, ça
00:24:02 :va nous dire ok, ça c'est l'objet voiture qui est une classe qui va permettre d'instancierdes voitures, mais ça va pas créer une instance, ça va juste dire ok, ça c'est l'objet,c'est le nom. Pareil quand vous faites, si j'ouvre un terminal ici et que je fais, voilà
00:24:16 :Python, si je fais une variable a égale 5, si ensuite je fais a, ça va juste me donnerla valeur, ça va me dire ok c'est l'objet a, et l'objet a il est égal à 5. Si je fais
00:24:26 :une, un fou, je vais grossir un petit peu, si je fais une fonction fou ici, et que jefais fou sans mettre les parenthèses, il va me dire ok c'est la fonction fou qui està cette adresse dans la mémoire, mais ça va pas l'exécuter. Pour l'exécuter, il
00:24:41 :faut vraiment que je mette les parenthèses. Donc là c'est pareil en fait, quand je reviensici, là c'est pareil. Quand vous faites quelque chose ici comme ça, vous avez deux
00:24:52 :noms qui sont créés, parce que là on met voiture 1, voiture 2, donc il faut bien qu'illes mette quelque part, mais comme il y a qu'une seule fois le voiture avec les parenthèses,là vous allez avoir un seul objet en mémoire. Par contre, si j'avais fait une assignation
00:25:10 :parallèle ou multiple, je me plante toujours entre les deux, donc la différence entreassignation parallèle et multiple, là je vais revenir dans mon piton, si je fais uneclasse voiture, d'ailleurs je vais en profiter pour mettre ipython, je l'avais mis, commeça on a la coloration syntaxique, ça va être un peu mieux. Donc, si je refais une classe
00:25:27 :voiture, comme ça, toute simple, je vais juste mettre un pass dedans. Donc si je faisvoiture01, voiture02, égale voiture, virgule, voiture. Donc là c'est une affectation parallèle
00:25:41 :justement, si je ne trompe pas, multiple justement, c'est quand on assigne un élément à plusieurschoses. Donc on va faire a égale b égale 5, là on a plusieurs assignations, donc multiple,
00:25:52 :on a deux noms qui sont associés à par exemple 5 ou à autre chose, tiens j'ai desballons qui apparaissent, je ne sais pas pourquoi, il y a peut-être un truc qui se passe, maisbon. Là par contre quand on fait une assignation parallèle, donc on le voit avec le parallélisme,
00:26:09 :on a voiture1, donc si je reviens avec mes petits dessins, hop, non merde il est parti,ok. Si j'efface tout ça, donc on a vraiment un parallélisme entre ça ici qui va aller
00:26:19 :là dedans, tac, voiture1 et voiture2 ici qui va aller dans voiture. Et là vous voyezqu'on a les deux appels, on a voiture ici et voiture là, et donc si je fais ça, sije fais id de voiture01 et id de voiture02, là vous voyez qu'on a bien deux identifiants
00:26:35 :différents, parce qu'on va créer deux objets différents, parce qu'on a deux fois lesparenthèses et qu'on met chaque instance dans chaque variable. Quand on fait le égale,
00:26:43 :on a deux noms, mais c'est multiple, on a un seul objet qui est assigné à deux noms.C'est bon pour ça ? Donc pour revenir sur la question ici, il n'y a qu'une seule instance
00:26:54 :dans ce cas-ci. Et ça là encore bon, c'est de l'orienter objet, ça serait la même choseavec, alors ça dépend après, il va y avoir des petits cas de figures différents aussipar rapport à la gestion de la mémoire par exemple avec des nombres, parce que vous l'avezvu des fois si vous faites a égale b égale 5, là ça peut être différent parce que
00:27:15 :Python c'est un nombre 5 qui va être dans la mémoire, donc il peut associer deux élémentsdifférents, le même élément similaire, il va pouvoir des fois optimiser pour justementne pas créer des objets en plus, donc si vous faites une assignation parallèle a,bégale 5,5, comme c'est le même nombre, Python va peut-être se dire, et là ça dépend
00:27:38 :encore de plein de cas de figures, de quelle implémentation de Python vous avez, de commentvous exécutez votre script etc, mais il va pouvoir faire des optimisations pour éviterde créer plusieurs fois le même objet et pour avoir un seul objet en mémoire, çapermet d'éviter de surcharger la mémoire avec des objets qui sont similaires. Donc
00:27:53 :il peut y avoir des petits cas de figures comme ça, des fois différents, mais làdans un cas comme celui-ci, quand on a notre propre classe qu'on crée, on va avoir unseul objet. Ok, ensuite, là on commence à rentrer dans des, ça j'ai envie de dire
00:28:07 :c'est même si vous n'avez pas forcément fait d'orienter objet, il y a un principefondamental qu'on va voir dans une autre question, justement de qu'est-ce qui a lapriorité entre l'attribut d'instance et de classe, j'ai envie de dire en fait mêmesi vous n'avez pas forcément vu tout ce qui est orienter objet, avec de la logique,
00:28:25 :si vous prenez le temps de regarder, là on va aller assez lentement, vous pouvez devinerce qui va être affiché ici. Donc ça je crois que c'est une question, hop, ah oui
00:28:36 :je crois qu'il peut me, voilà, donc là c'est une question à choix multiple, nonil n'y a qu'un seul truc possible. Hop, je vais effacer le truc, ok. Donc, ok ouais
00:28:51 :ça c'est pas mal. Donc voilà, quand on fait un print de voiture 1.marque, qu'est-ceque ça affiche ? Ah, ça se bataille entre Renault et Ferrari. Ok donc là c'est quoi,
00:29:11 :6 sur 11 en bas, j'imagine c'est le nombre de gens qui ont voté, message, c'est quoiça merde, ok, message. Bon je reviens sur les votes, ça c'est quoi, je peux faire une
00:29:22 :question rapide, pendant que vous répondez je découvre. Ok, ça c'est, t'as le droit,mais pour le Tosa ça marchera pas ça Renault. Ok, alors on a pas mal de gens qui s'orientent
00:29:51 :vers Renault plutôt que Ferrari. Ok, et donc là si je mets, ah oui ok je pense que l'autrequestion c'était quoi, c'était une question, je sais plus, celle d'avant. Ok, donc réponse
00:30:08 :correcte, hop, désolé j'ai coupé l'herbe sous le pied peut-être, mais bon du coupje vous ai spoilé, là il en restait 3-4 qui n'ont pas répondu. Effectivement, donc
00:30:17 :la réponse correcte mais bon voilà le consensus était assez large, là c'est assez logique,enfin c'est assez logique justement, ça dépend on va voir après, bon là le cas est assezsimple mais vous allez voir par la suite là quand on commence à changer un petit peules choses, changer l'ordre des prints etc, ça commence à devenir un petit peu plus
00:30:33 :compliqué. Donc là effectivement on affiche Renault parce que c'est d'abord l'attributd'instance qui va avoir la priorité sur l'attribut de la classe. Donc l'attributd'instance c'est, hop je reprends mon petit stylo, tiens j'ai de l'encre éphémère,c'est pas mal ça, l'attribut d'instance c'est celui-là ici, puisque le self ici
00:30:54 :représente l'instance, là aussi le self on va y revenir un petit peu plus tard, etle marque ici c'est l'attribut qui est directement en dessous de la classe, donc c'est l'attributvraiment de la classe, donc attribut de classe, attribut d'instance. Et là on crée une instance
00:31:06 :ici, voiture 1 ici, c'est une instance qui est créée à partir de la classe, et ensuiteon affiche la marque sur l'instance. Donc qu'est-ce que ça va nous afficher ? Effectivement
00:31:14 :dans ce cas-ci l'attribut qui est défini ici sur l'instance qui est bien Renault.Si on avait affiché directement voiture comme ça, le voiture avec le V majusculepoint marque, là effectivement on irait chercher directement l'attribut qui est défini surla classe et non pas sur l'instance, puisqu'on ciblerait la classe. Là comme on a créé
00:31:34 :une instance et qu'on a un attribut qui est défini, on va afficher l'attribut qui estdéfini ici. En fait Python il faut vous dire que ce qu'il va faire comme chemin c'est
00:31:42 :qu'il va regarder déjà est-ce que j'ai un attribut au niveau de mon instance, donclà oui parce qu'on a avec le constructeur unit créé un attribut qui est sur self,et self là encore on va revoir tout ça un petit peu plus en détail, mais self c'estvoiture 1 ici, donc on a bien voiture 1 point marque ici, qui est effectivement ce qu'on
00:32:00 :affiche donc qui est égal à Renault. Ok ? Ça va à peu près pour ça, ça va devenirde plus en plus clair je pense avec les autres choses qu'on va voir. Prochaine question,
00:32:14 :on continue un petit peu. Donc voilà. Quelle sera la valeur affichée par le print ? Donclà on commence à modifier un petit peu, donc on a une voiture, une instance qu'oncrée à partir de voiture, là on passe donc quand on crée l'instance ici sur l'instanciation,on passe BMW à marque et on le met dans l'attribut d'instance. Ensuite on fait cette assignation
00:32:42 :et ensuite on affiche ça ici. Donc là je vous laisse réfléchir, prenez le temps.Allo, moi j'ai perdu le truc là, je n'arrive plus à voir le questionnaire. C'est le cas
00:33:05 :pour tout le monde ou je vois qu'il y a des réponses ? Rafraîchis la page peut-êtrerevient sur ferme et puis retourne sur le lien ? Je pense que ça va. Ah ok, c'est
00:33:30 :un petit problème d'actualisation. Donc je laisse encore les gens. Ouais t'aimes bienle jeu de Vic ? Moi je pense que c'est bien aussi de participer un petit peu comme ça,
00:33:45 :parce que c'est vrai que les cours magistraux, ce que je me dis à chaque fois surtout surdes sujets comme ça, vous les avez déjà disponibles donc je peux les refaire maisen fait on tourne un petit peu en rond j'ai l'impression alors que là ça permet de se
00:33:58 :poser des questions un petit peu. Et quand on maîtrisera bien l'outil ça sera encoremieux. Donc on a une majorité de BMW, un Renault, je vous laisse encore quelques secondes.
00:34:15 :Ouais c'est ça, je peux vous masquer les réponses des autres parce que c'est vraique ça influe aussi, j'imagine quand je vous montre les réponses. Après ça veut
00:34:33 :rien dire parce qu'on a vu sur le nombre d'instances, presque tout le monde a répondu2. Je sais pas si c'est bien de vous laisser influencer ou pas, je sais pas ce que vous
00:34:42 :préférez, c'est peut-être mieux de pas être trop influencé. Bon après c'est àvous aussi de vous dire justement, répondez sans vous influencer, que vous ayez l'affichageou pas, réfléchissez vraiment au truc. Donc là effectivement, si j'affiche réponse
00:34:59 :correcte, on est bien avec BMW. Donc qu'est-ce qui se passe ici, on a encore une fois unattribut sur la classe, un attribut sur l'instance, avec cette fois-ci l'attribut qui est définidynamiquement au moment où je crée l'instance, alors qu'avant il était défini directementdans le init et on avait pas la possibilité de le modifier quand on créait l'instance,
00:35:19 :là je peux le faire ici parce que je récupère dans la définition du constructeur ici, j'aidéfini un paramètre justement et je lui passe en argument la chaîne de caractèreBMW qui est ensuite stockée dans l'attribut d'instance, qui est donc l'instance voiture01. Ensuite je change donc ici l'attribut sur voiture avec le V majuscule, donc je
00:35:44 :change l'attribut ici, mais j'ai toujours un attribut qui est défini sur l'instanceet là encore c'est le chemin que fait Python, il va regarder est-ce que j'ai un attribut,il va commencer par l'attribut d'instance, s'il a un attribut d'instance il va affichercelui-ci, s'il en a pas il va regarder est-ce qu'il a un attribut au niveau de la classe
00:36:03 :à partir de laquelle l'instance a été créée, donc là dans ce cas-ci la voiture,et s'il n'y a toujours pas d'attribut au niveau de la classe on aura un NameError,donc par exemple ici si je fais voiture01.vitesse, il va regarder est-ce que j'ai un attribut
00:36:19 :sur l'instance voiture01.vitesse, donc est-ce que j'ai une variable en gros vitesse quiest définie avec self.vitesse, s'il en a pas il va regarder est-ce que j'ai un voiture.vitesse,
00:36:30 :un attribut classe générique au niveau de la classe, s'il en a un il nous l'affiche,même si on l'affiche sur l'instance, donc même si on fait voiture01.vitesse, c'est
00:36:40 :peut-être un peu abstrait comme ça en parlant, je vais vous sortir un paille de charme, çasera un petit peu plus clair, parce que là c'est peut-être un peu, et je vais zoomer,ok, donc ce que je veux dire, si on a une vitesse ici, et je vais désactiver le foutu
00:37:02 :copilote, donc on a une vitesse à 100, on va faire un init, et on va mettre un passe,donc là si je fais une voiture01 qui est égale à voiture, comme ça, si je fais unprint de voiture01.vitesse, là il n'y en a pas qui est défini au niveau de l'instance,
00:37:20 :mais il y en a un qui est défini au niveau de la classe, donc là il ne va pas me faireun aimerror, si je lance le script, on a bien 100 qui est affiché, ok, parce qu'il y ena un qui est défini, donc c'est un peu le fallback si vous voulez, ce qui peut être
00:37:33 :pratique des fois, parce que bon là pour la vitesse, souvent ça va être dépendantde la voiture, mais on pourrait avoir, l'exemple que je donne dans les courses si je me souviensbien, c'est les pneus, donc pour une voiture on va dire voilà il y a 4 pneus, et en fonction
00:37:44 :des voitures ça ne change pas, après on pourrait se dire ok on va faire, avec de l'héritagepar exemple on pourrait faire un camion qui va hériter, enfin on pourrait faire une classevéhicule qui serait assez générique, et ensuite on pourrait faire à partir de l'héritageune classe voiture qui aura 4 pneus, une classe camion qu'on aurait 6 ou 8, une classe moto
00:38:02 :qui va hériter de véhicule aussi qu'on n'aurait que 2, des fois il peut y en avoir 3, doncvoilà, pneu c'est un exemple plus ou moins bon, mais voilà, on pourra avoir des attributscomme ça qui ne changent pas en fonction des instances. La vitesse, la marque, la couleur,
00:38:16 :toutes ces choses là c'est souvent des choses qu'on va modifier en fonction de la voiture,si c'est une BMW rouge qui va plus vite qu'une Renault électrique qui va moins vite, ouje ne sais pas, des choses du genre, ça va être modifié. Donc vous voyez c'est ça
00:38:28 :le chemin qu'il fait, je suis en train de répondre à une autre question qu'on vavoir plus tard sur le Wooclap, mais vous allez voir, il y aura quand même un petitpeu de difficultés. Et après effectivement si on modifie, donc si je reviens sur l'exemple
00:38:41 :qui est dans le Wooclap, on a une marque ici qui est égale à la marque que je définisici, et on a une marque générale ici qui est Ferrari, et la marque on met BMW. Donc
00:38:56 :là si j'affiche ça ici, je lance, on va bien avoir la marque BMW, jusque là c'estpas trop surprenant, par contre si je change voiture.marque égale à, on va mettre Renault,
00:39:10 :là on ne va pas modifier, et c'est là où ça peut devenir un petit peu confus,c'est qu'on a deux attributs, on a deux variables marque dans la mémoire qui sontattachées à des objets différents et qui vont avoir des valeurs différentes. Donc
00:39:26 :si ici je fais voiture.marque et voiture.marque, on a deux fois le même attribut ici, maislà on a l'attribut d'instance et là on a l'attribut de classe. Donc si je lance,
00:39:37 :on a bien BMW et Renault, on l'a changé ici donc on n'a plus Ferrari, on l'a modifié,ça c'est normal, on a écrasé l'ancienne valeur, on en a recréé en fait une nouvelleet donc ça a été modifié. Mais on n'a pas touché à celui de l'instance. Et pour
00:39:52 :terminer sur cette explication, là où ça peut être un petit peu différent, c'estque si on n'a pas d'attribut par contre ici, si je mets un passe et qu'on définitl'attribut et que je commande ça pour l'instant, j'enlève ça. Donc là comme je vous l'ai
00:40:10 :dit, là encore une fois logique, on n'a pas d'attribut sur l'instance donc on vafaire un fallback sur celui de la classe, Ferrari ok. Et par contre si je change au
00:40:20 :niveau de la classe, là du coup vous voyez que ça va changer aussi sur l'instance.Et ça va changer, et c'est là où c'est intéressant ce mécanisme, c'est que çava changer sur toutes les instances. Donc si je fais voiture-02 égale à voiture aussi
00:40:36 :et que je print voiture01 et voiture02, là on a changé à un endroit sur la classeet ça a changé pour toutes les instances. Donc ça c'est pratique, si vous l'utilisez
00:40:50 :comme ça c'est un comportement attendu et voulu donc il faut faire attention bien sûrparce qu'à l'inverse si vous savez pas trop ce que vous faites ça peut causer desproblèmes. Si on a par exemple un exemple un peu plus concret, on pourrait avoir un
00:41:02 :fichier de configuration qui est défini au niveau de la classe. Donc on pourrait avoirune classe settings ici, settings avec un config path et là on aurait config.json.
00:41:15 :Donc là ça pourrait être pratique dans ce cas-ci de se dire ok à un moment finalementon a plein d'objets en mémoire et quelqu'un a changé le... Oui effectivement, faut savoir
00:41:27 :ce qu'on fait c'est sûr. Effectivement il peut y avoir des side effects qui peuventêtre bien, qui sont des side effects, du coup si tu sais ce que tu fais ça peut êtrepratique. Après dans la pratique je vous dirais que c'est rare quand même qu'on aille,
00:41:42 :c'est une possibilité de se dire ok on a un attribut de classe, personnellement jevois pas trop d'exemples dans lesquels j'ai utilisé ça. Souvent si on a besoin de changer
00:41:52 :une configuration générale on va avoir un fichier de config par exemple ou on va avoirune base de données et puis en fait le chemin vers le fichier va être dans la base de donnéeset on va lire depuis la base de données et si quelqu'un met à jour la base de données
00:42:04 :ça va mettre à jour pour tout le monde. Puisque là en fait quand on fait ça, çava vraiment être dans la mémoire. Ça pourrait être pratique par exemple si on a je sais
00:42:13 :pas, je réfléchis à un jeu avec Pygame ou des trucs comme ça ou des programmes quisont vraiment dans la mémoire en un vide de commandes et qu'à un moment on a quelquechose, on veut un comportement qui va changer partout, on n'a pas de base de données et
00:42:25 :on a plein d'instances qui ont été créées à partir d'une classe et on veut que quandl'utilisateur clique sur un bouton ça va changer justement une valeur qui va êtreappliquée à toutes les instances qu'on a en mémoire. Là ça peut être intéressant
00:42:35 :d'avoir un attribut sur la classe qu'on va modifier et comme ça on n'a pas besoinde faire une boucle for par exemple pour passer à travers toutes les instances qu'onaurait à partir de la classe pour changer sur chaque instance. On peut le changer une
00:42:46 :seule fois et ça va avoir l'effet sur tous les autres. Et après par contre là où c'estintéressant c'est que si je reviens sur mon exemple de voiture, la chose intéressantec'est que du coup on a le contrôle sur les deux. On peut changer au niveau de la voiture
00:43:01 :au complet mais après si je change au niveau des instances, là ça va impacter juste lavoiture 1, juste la voiture 2 et là on va avoir une marque pour la voiture 1, une marquepour la voiture 2 et une marque pour la classe voiture qui va être encore différente. On
00:43:14 :va avoir trois attributs marque en tout qui peuvent être différents. Je vous ai faitun petit peu de théorie parce que vous allez voir qu'après il y a des questions un petitpeu plus compliquées encore là dessus et ça va vous permettre de retester tout ça.
00:43:27 :Donc voilà c'est la fameuse question dont j'ai déjà un petit peu répondu mais jevous laisse regarder de votre côté. Il faut remettre dans l'ordre. C'est ça, il faut
00:43:41 :glisser les trucs. Donc dans quel ordre ça va s'afficher ici ? Quand on affiche ça,est-ce que ça va déjà afficher Renault, ensuite Porsche, ensuite Ferrari, ensuiteune autre fois Renault, Renault-Ferrari, Renault-Porsche. Il faut les glisser dans
00:43:57 :l'ordre normalement en fonction des prints ici. Donc là justement, je vous laisse unpetit peu de temps, je vais remplir mon verre d'eau et je vous laisse répondre à ça.
00:44:09 :Merci d'avoir regardé cette vidéo !Ok, donc là je pense que tout le monde a à peu près la même chose.Donc ouais, ça change pas mal de choses. Ok, j'attends encore 10 secondes pour ceux
00:45:48 :qui tardent à répondre. Je pense que je peux mettre des chronos aussi sur les questionsque j'ai hésité, je sais pas si je peux choisir le temps. Ok, 5, 4, 3, 2, 1 et hop
00:46:06 :c'est fini. Donc je pense que oui, on a eu la plupart des gens qui ont eu je crois labonne réponse, si je me souviens bien il y avait deux Renault de suite. Donc là qu'est-ce
00:46:19 :qu'on fait ? Hop je reprends mon petit stylo. Donc on a au départ un attribut de classeici, donc défini sur la voiture. Donc si je fais voiture.marque ça va afficher Ferrari,
00:46:32 :là après je crée une instance, j'ai rien dans le init ici, ça m'empêche pas, çac'est un truc aussi que je vois très souvent les gens qui pensent que si on a pas définidéjà quelque chose dans le init on peut pas le faire après. En fait oui, il faut
00:46:45 :vraiment vous dire que là c'est comme n'importe quoi quand on crée une variable, quand vousêtes dans Python vous pouvez faire a égale 5, il va pas vous en empêcher. Là c'est
00:46:53 :pareil, c'est juste que ça va être attaché à une instance, à un objet, mais vous pouvezfaire voiture01.vitez.n'importe quoi, ça va juste créer un attribut, une variable
00:47:04 :associée à cet objet que vous pouvez modifier, afficher etc. Donc là c'est ce qu'on fait.Donc premièrement au début on affiche voiture01.marque, on en a pas défini, on en a pas dans le init,
00:47:17 :donc il va par défaut revenir sur le Ferrari, donc effectivement c'est ce que vous aviezmis, si je reviens, réponse correcte, hop, voilà. Donc c'est ça, il nous affiche le
00:47:27 :Ferrari, c'est un peu chiant je peux pas, si je peux afficher, non je peux pas afficherdans le même temps, ok on voit pas trop, bon, ok je vais revenir sur moi, c'est unpeu chiant ça. Donc il va afficher une première fois Ferrari, ensuite on change sur l'instance,
00:47:42 :on affiche la valeur qui est sur l'instance, donc on en a défini une, donc ça va afficherRenault, on change sur la marque, mais comme on en a défini un sur l'instance, ça vaprendre le pas sur celle de la classe, ce qui est différent de la première fois où
00:47:58 :il y en avait pas qui était défini sur l'instance, donc là quand il y en a pas sur l'instanceil remonte un niveau, il regarde dans la classe, il affiche la classe, mais quand on en a àla fois sur l'instance et sur la classe, il affiche en priorité, enfin en priorité
00:48:10 :il affiche, il n'en affiche qu'un, il n'en affiche pas plusieurs, il va choisir celuiqui est au plus proche de l'instance. Et ensuite on change donc la Porsche, on raffiche,
00:48:21 :donc là ça a pas changé, on va rafficher une deuxième fois Renault, puisqu'on l'apas changé, et ensuite, là par contre comme on a changé au niveau de la classe, on vaafficher Porsche. Donc effectivement la bonne réponse c'était ça, on a Renault une première
00:48:34 :fois, Ferrari, Renault une deuxième fois, et après Porsche qui a été changée. Cava pour ça ? Ah, ouais Sylla t'as une question ? Oui, au fait, sur l'assignation là, là
00:49:03 :on a dit, parce que là on a pas de, dans Auto-Init on a pas de paramètres, et du coupsi on met voiture 0 un marque, il va créer un paramètre par défaut ou je sais pas ? Alors,
00:49:22 :oui, je vais prendre le code, et pour les réponses fausses, je pense que c'est parcequ'il y avait deux Renault, donc probablement qu'en fait il y avait un ordre bon pour lesdeux Renault, et que vous avez, bon là du coup il faudrait que je vois, parce qu'ilen a choisi, faudrait que je mette Renault 1 et Renault 2, je sais pas, mais oui, donc
00:49:43 :là en fait, si je reviens là, donc on a notre voiture, là si je fais effectivementprint voiture01.marque, là t'en a pas qui est défini, effectivement on pourrait se
00:49:55 :dire, ah bah pourquoi là on a pas, pourquoi ici on a pas un aimeror ? Bah là c'est vraimentparce que t'en a un qui est défini ici, si t'en a pas qui est défini ici, si je commandeça, là tu vas avoir un aimeror, d'ailleurs il va me le marquer ici, si je lance le script
00:50:09 :là, attributer, alors pardon, effectivement aimeror, si je fais print A ici, là il vame dire aimeror, le nom n'est pas défini, là comme c'est sur un objet du coup, et çamontre bien que comme je disais, le vocabulaire est important, là c'est un attribut qui n'estpas défini sur cette instance, et du coup on a un aimeror. Si par contre tu le mets
00:50:36 :là, il va regarder, est-ce que j'en ai un sur mon instance ? Non, parce que là on n'apas fait self.marque, on a pas non plus fait voiture01.marque égale à Patrick, donc quand
00:50:50 :on en a pas défini un directement sur l'instance, il y retourne au niveau de la classe, il vadire ok voiture01, c'est une instance qui est créée à partir de voiture, sur voiturej'ai une marque, donc j'affiche l'attribut de la classe à partir de laquelle j'ai créél'instance. Ça va ? Oui ça va. Faut pas hésiter après ça à mettre les mains dans
00:51:15 :le code et le faire de votre côté pour provoquer les erreurs, voir justement si je le changelà, là je vous montre le code, vous répondez, mais c'est toujours bien de mettre les mainsdedans et de tester des choses pour vraiment bien voir ce qui se passe. Ok, donc je crois
00:51:32 :qu'il reste deux questions, ouais ok, alors là c'est les questions où il faut que vousécriviez, donc là c'est un peu freestyle, ça va nous permettre d'arriver sur le fameuxself. On va terminer justement sur cette notion importante. Alors là c'est un nuage
00:52:03 :de mots qui s'affiche, donc je crois que ça affiche plein de mots parmi les réponsesque vous mettez, si je ne me trompe pas. Aucune idée. Alors, créer méthode où aucun mange,
00:52:16 :il y a des gens qui ont faim, liste de résultats, grille de résultats, ok, c'est là où onmange. Ah oui vous pouvez aussi, oui c'est ça, c'est pas mal, vous pouvez, parce qu'effectivement
00:52:34 :des fois il y a des gens qui ont la bonne réponse déjà, donc vous pouvez voter pournommer, ok, créer méthode, ok, permettre de faire référence, ouais, à l'instancede la classe, créer une convention, ok, ok, donc, hop, ok, non il y a quelqu'un qui aenlevé sa réponse peut-être, je sais pas, non, liste, programmation, attributs d'instance,
00:53:15 :alors c'est pas un self, attention, c'est là-dessus qu'on va pouvoir mettre des attributsqui appartiennent à l'instance, puisque self effectivement représente l'instance, c'estpas non plus une création, ça va être créé au moment où on crée l'instance, mais c'estpas le self qui permet de créer, le init, là on pourrait dire ok, dans un certain sens
00:53:42 :le init crée l'instance à partir de la classe. Effectivement permettre de faire référenceà l'instance qui a été faite à partir de la classe, oui, bon je vais vous mettrela réponse textbook en python, donc c'est une convention de nommage, donc conventioneffectivement parce qu'on n'est pas obligé de l'appeler comme ça, après j'ai jamais
00:54:01 :vu un script où les gens l'appelaient autrement, mais c'est pas une obligation, vous pouvezl'appeler Patrick comme dans mes exemples fameux, mais voilà, généralement on metself. Si vous allez dans du PHP ou du Javascript aussi je crois, vous allez avoir this, souvent
00:54:18 :qui a un peu cette notion, on a aussi, qu'est-ce qu'on avait d'autre ? Il y a d'autres langagesaussi qui utilisent self, en C je crois que je me souviens plus, peut-être que Al, sit'es encore là t'as la réponse, ouais this, il me semble aussi que la plupart des langages
00:54:36 :c'est this. Donc pour faire référence, et c'est là où la notion est un petit peu,un petit peu qu'il faut préciser, c'est pour faire référence à l'instance actuelle dela classe. Pourquoi actuelle ? Parce que le self on l'utilise à l'intérieur de la classe
00:54:52 :et c'est pour ça que c'est très confus au début, parce qu'en fait on ne l'utilisepas en dehors de la classe, vous n'allez jamais voir self, vous pouvez créer une variableself en dehors dans le script global, mais bon ça va juste être une variable qui s'appelleself, mais quand vous allez voir c'est tout le temps dans les classes, vous allez avoir
00:55:09 :self.marque comme on l'a vu, vous allez la voir aussi dans toutes les méthodes, lesméthodes d'instance, vous allez avoir le self en premier argument, donc c'est vraimentà l'intérieur de la classe, pourtant ça ne représente pas la classe, donc c'est çaqui est un peu bizarre, c'est qu'on l'utilise à l'intérieur pour pouvoir modifier l'instance,
00:55:24 :mais ça n'a rien à voir avec la classe, donc ça n'a rien à voir avec l'endroitdans lequel on le définit, parce que la classe comme on l'a vu quand on fait voiture.marque
00:55:33 :on va modifier les éléments de la classe, mais on a quand même le self dans toute lalogique interne de la classe, donc c'est pour ça que c'est un petit peu confus souvent,mais je vais vous remontrer tout ça un petit peu plus avec du code.
00:55:44 :Donc je vous mets la dernière question, qui est le ultimate, donc là c'est un peu malfait, là j'ai vu, j'ai testé, je pensais que ça allait être des trucs un peu commedans le Toza justement pour ceux qui avaient testé là, où vous reliez une question àune autre, mais si je me souviens bien là quand j'ai vu, il faut choisir, ça dépend
00:56:06 :peut-être des navigateurs aussi, là j'avais testé avec Brave, je sais pas, mais c'étaitdes menus déroulants là, donc c'était pas très pratique.Donc là on a un petit peu tous les termes justement, tous les mots clés de l'orientéobjet qu'il faut associer aux définitions.
00:56:20 :Donc là il y en a pour bien quelques minutes, donc je vous laisse réfléchir là-dessuset après on va revenir pour terminer sur le self.
00:56:26 :Et j'ai inclus des trucs un petit peu plus avancés justement, comme l'héritage, encapsulation,polymorphisme, le reste on a à peu près tout vu, méthode, constructeur, objet, classe,méthode de classe, méthode statique, méthode de classe, on n'en a pas parlé.
00:56:47 :Donc voilà, il y en a la bonne moitié là que vous devriez pouvoir à peu près relieravec ce qu'on a vu aujourd'hui, et le reste allez-y avec ce que vous pensez.
00:57:01 :Ok j'avais peur que ce soit dans le bon ordre, mais en fait non, c'est bien mélangé.Ça va, vous arrivez ?Je ne vois pas de progression là, mais peut-être qu'il faut, il y a beaucoup de choses là.
00:58:51 :Je pense que ça va commencer à me les afficher quand vous avez tout rempli, mais pas au furet à mesure, mais du coup il y en a beaucoup.
00:59:01 :Et je ne sais pas si vous pouvez valider si vous n'avez pas tout rempli, du coup il fautpeut-être y aller un peu par élimination ou au pif pour les restants.
00:59:11 :Et oui, et oui, ça ne m'étonne pas du tout qu'effectivement enfait, c'est une particularité de Python, que vraiment vous avez beaucoup de chosesqui sont laissées un peu libres, là où beaucoup d'autres langages forcent les choses.
00:59:53 :Il y en a qui préfèrent, il y en a qui... Bon après le self comme je vous dis, j'aitellement tout le temps vu ça, qu'il y a des conventions des fois qui sont un petitpeu moins respectées, mais pour ça franchement je n'ai jamais vu, vraiment jamais vu, c'est
01:00:09 :comme les nomenclatures, sur le snake case, camel case, tout ça, je n'ai jamais vu desgens utiliser autre chose.Ouais, question, quelqu'un veut lever la main, ouais.
01:00:24 :Ouais, tu as un micro ?Ou alors tu n'as pas cliqué sur le bon bouton ?Ok, je ne sais pas si tu avais une question et si tu n'as pas de micro, n'hésite pasà écrire dans le chat si tu as une question spécifique.
01:01:12 :Ok, ça commence à arriver, 6 réponses.Ok, ok, comment ça marche, ça m'étonne, ok.Bon alors, ok là je vois ceux qui ont répondu le plus, donc constructeur, ouais donc çac'est effectivement une fonction spéciale appelée lors de la création d'une instance,ça ouais on l'a vu, c'est bon.
01:01:39 :Donc encapsulation, oui effectivement, ça on ne l'a pas vu du coup, c'est bien vousavez bien répondu aux trucs les plus compliqués, peut-être par élimination du coup, je nesais pas, polymorphisme donc c'est effectivement la capacité d'utiliser une même interfacepour différents objets, ça on a eu une bonne question là-dessus récemment, je crois
01:02:04 :que je l'avais posté d'ailleurs, je vais essayer de retourner voir, dans questions,là si je tape polymorphisme, non, tiens hop, la recherche qui ne marche pas, super.
01:02:21 :Qui c'était, ouais c'était celle-là, ok, je vous la montrerai après, c'était intéressantjustement, là-dessus, ok.Donc objet, ouais, une instance d'une classe, oui l'objet je l'avais mis après et c'étaitpas forcément très clair parce que ça peut être un peu tout en fait.
01:02:42 :Classe, un modèle pour créer, ouais c'est bon, héritage, bon ça c'était assez facileà hériter les attributs et méthodes d'une autre classe, ouais.Une fonction définie à l'intérieur d'une classe, oui, donc ça effectivement la méthode,la méthode c'est un peu comme attributs, variables, c'est un peu près à la même
01:03:01 :chose mais pas tout à fait, donc une méthode c'est une fonction mais sauf qu'elle estdans une classe, donc là encore c'est toujours bon d'utiliser les bonnes choses, là encorequand je dis si vous parlez à un collègue et que vous lui dites que ma fonction ne marchepas, par défaut il va penser que vous ne faites pas de l'orienté objet, du coup il
01:03:17 :va se dire ok il a une fonction en dehors d'un objet et ça peut induire en erreurparce que du coup la personne va se dire ok c'est une fonction isolée, si là vous luidites j'ai une méthode qui ne fonctionne pas, la personne peut se dire ah ok il y a
01:03:28 :peut-être un problème avec justement le self, avec l'héritage, ça envoie sur lapiste que c'est peut-être déjà plus complexe qu'une fonction qui est séparée un peude tout.
01:03:39 :Donc c'est pour ça que les mots sont importants.Pareil les attributs, une variable, attribut c'est vraiment ce qui appartient à un objetet un attribut quand on parle d'afficher tous les attributs d'un objet ça peut inclureaussi les méthodes justement, quand vous faites dire d'un objet, la fameuse fonction
01:03:55 :dire, si vous regardez la documentation par exemple il va vous dire que ça affiche tousles attributs et dans les attributs ça va inclure les attributs de style variable maisaussi les méthodes qui sont considérées comme des attributs dans la documentationsi je ne me trompe pas.
01:04:13 :Donc le self, le premier paragraphe qui fait référence à l'instance courante, ça c'estbien.Attribut de classe, une variable partagée par toutes les instances, une variable définie,unique.
01:04:24 :Méthode statique, celui-là il était avec static method, j'avais mis le class method,c'était pas si compliqué finalement, je vous avais mis des petits hints.Attribut d'instance, ça c'est ceux qui se sont plantés du coup.
01:04:44 :Donc si je vous affiche, réponse correcte, ok c'est cool.Donc qu'est-ce qui a été le moins bien répondu, le class method, méthode de classe,ok donc c'est ça.
01:04:55 :Donc une méthode de classe effectivement c'est une méthode, la méthode de classec'est la méthode statique là aussi, il y a des gens qui aiment beaucoup ça, il y ades gens qui disent ah non c'est pas bien, faut pas les utiliser.
01:05:06 :Je crois même que, si je ne me trompe pas, je confonds toujours entre statique et classe,lequel est indiqué dans la documentation comme étant un truc à ne pas utiliser.
01:05:14 :Je crois qu'il y en a un des deux où c'est clairement marqué en fait, bon c'est un peucomme le mot clé globale qui existe mais qui en fait est quasiment jamais utiliséet qui est souvent utilisé pour les mauvaises raisons du coup.
01:05:26 :Donc statique méthode, c'est classe méthode, statique méthode, je pourrais vous le montrerun petit peu, je ne vais pas vous le montrer, ça va être un peu trop long, je vous renvoievers les cours qui parlent de ça, ça va être beaucoup plus clair, par contre je vaisrevenir sur le self, pour le reste c'était assez clair finalement, vous avez bien répondu
01:05:47 :en grande majorité donc c'est cool.Et c'est fini du coup, qu'est-ce que ça me met, petit message de fin.Ok, donc ça vous a plu ce petit truc interactif ?
01:06:01 :Ah oui, Windows, problèmes de micro, je te rassure ça arrive aussi quand même pas malpour le coup sur Mac les problèmes de micro, Linux aussi, problèmes de périphérique souvent.
01:06:19 :Donc méthode statique, bien qu'ils aient répondu, ok je n'avais pas compris la subtilitéaux attributs d'instance, oui alors la méthode statique c'est comme les affectations parallèleset multiples, il faut que je remette mon cerveau en mode réflexion pendant deux secondes,donc si on a une classe, on va faire, qu'est-ce qu'on va dire, les classes méthode c'est
01:06:45 :pas mal utilisé pour créer par exemple, les classes méthode c'est ça, l'exempleque je donne si je me souviens bien dans la formation c'est avec les pizzas, si on faitun pepperoni, je ne sais pas combien il y a de R, de N et de P, en fait là on peut
01:07:03 :faire une classe méthode et si je fais justement, l'intérêt c'est que ça va permettre decréer facilement des, donc si je fais un def init, et que là on va mettre par exempleself.ingredients égale à ingredients, et que là je fais un ingredients, voilà, ça
01:07:28 :te permet de faire quelque chose qui va être bien défini, donc plutôt que de laisserle choix à tes développeurs à chaque fois de dire merde c'est quoi déjà la listed'ingrédients et de dire ok c'est poivron, je sais pas, fromage et sauce, bah là ducoup tu peux le faire directement ici, et là tu vois il me l'indique, c'est que du
01:07:48 :coup tu vas mettre là encore par convention, c'est CLS, on pourrait mettre Patrick làencore ici, c'est juste que ça va récupérer la classe, et donc là en fait tu peux faireCLS point, on pourrait faire aussi pizza directement, quoi que ça va peut-être me mettre une erreurde référence comme ça, mais je pense que, ouais je sais pas, j'avoue que j'ai pas un
01:08:06 :truc que j'ai essayé, ouais ok, après l'intérêt c'est que si tu changes comme ça ici le nom,si tu mets pizza comme ça, bah ça va être reflété automatiquement, t'auras pas besoinde le changer à tous les endroits, donc là on peut faire CLS, on peut faire return de
01:08:20 :CLS avec ingredients qui est égal déjà à tout ça ici, et donc c'est l'intérêt,comme ça après tu peux dire pepper, égal à pizza point pepperoni, comme ça, et ducoup point ingredients, t'auras déjà tout qui va être bien fait, et donc tu vois parrapport à ta question, ça peut du coup accéder après aux attributs d'instance, c'est juste
01:08:54 :que ça te crée en fait, c'est souvent pour ça, après je réfléchis, il y a peut-êtreclasse méthode des fois, il y a d'autres cas de figure, il me semble que j'en avais,j'allais voir dans mon code, est-ce que j'ai mon code là, classe méthode, je vais en avoir
01:09:16 :défini quelques-uns, est-ce que je les ai déjà utilisés pour d'autres choses, ouaislà je crée des classes, non c'est souvent pour ça, ouais je l'utilise toujours avecle CLS, et du coup c'est souvent pour ça, et les static method c'est encore un niveaudessus, c'est un peu une fonction dans une classe, donc là c'est souvent utilisé, c'est
01:09:50 :utilisé dans DateTime si mes souvenirs sont bons, ouais, dans DateTime on a par exempleles fameux DateTime.now qui sont là pour le coup des classes méthode, donc qui permettent
01:10:03 :de créer un objet DateTime spécifique, et les static method je crois qu'on en a aussi,si je ne me trompe pas, le StringFromTime, qui est en fait une fonction qui permet demodifier, quoi que non on va lui passer, stringFromTime, il y a l'un des deux si je ne me
01:10:22 :trompe pas qui est une méthode statique, ça permet de faire des fonctions sans le selfen fait, donc là qui ne vont pas avoir effectivement accès aux attributs de l'instance, là pourle coup, donc c'est peut-être ça effectivement, méthode statique, ah oui c'est ça que tudisais, excuse, effectivement la static méthode elle ne va pas avoir accès, après tu peux
01:10:42 :avoir des variables à l'intérieur effectivement qui vont être définies juste à l'intérieurde la fonction, mais là finalement c'est juste une fonction à l'intérieur d'une classe,c'est vraiment juste ça, c'est utile si tu veux garder ce lien entre les deux, là encoresouvent comme je te dis en fait les gens vont plutôt dire bah en fait si c'est une fonction
01:11:00 :que tu vas lui passer un objet, tu mets là en dehors de ta classe, là ça se batailleun petit peu là dessus, c'est vraiment une question d'organisation en fonction des développeursça va différer. Ok donc je reviens sur le self et on va terminer là dessus, ah ok
01:11:18 :on a déjà dépassé un petit peu, donc le self effectivement si je reviens sur le selfon va revenir avec notre exemple de voiture, là encore j'ai fait une vidéo d'une minutequi explique ça, je crois qu'elle est juste sur Youtube celle-là, je vais peut-être rajouteraprès sur les cours. Donc le self, si je fais ça comme ça ici, le truc qui fait l'eureka
01:11:42 :effect à tout le monde c'est de voir que si je fais voiture 0 1 égale voiture commeça et qu'ensuite on va faire afficher marque comme ça et là on va faire juste un printde self.marque, donc là si je fais voiture 0 1.afficher marque, j'ai pas besoin de passer
01:12:04 :quoi que ce soit ici et c'est là où c'est bizarre parce que normalement si je fais unefonction fou comme ça, que je fais print A et que je lui passe A ici, si j'appellefou comme ça et que je lui passe rien, là j'ai un problème, là vous voyez il me signale
01:12:20 :une erreur et je vais avoir une erreur si je le lance, on a un type error parce quemissing one required positional argument, parce que je n'ai pas mis de valeur par défaut,donc si je mets une valeur par défaut ça marche mais si j'ai pas de valeur par défaut
01:12:32 :j'ai un problème, il faut bien que je lui donne quelque chose, ce qui n'est pas lecas ici, on a rien donné à self pourtant ça marche. Donc c'est vraiment ce mécanisme
01:12:41 :ici qui est un petit peu bizarre et si j'affiche là ici, on va mettre vitesse, ça n'a pastrop de sens ici cette fonction mais c'est pour l'exemple, là par contre je peux luipasser vitesse égale 100 et je vais afficher les deux et je vais enlever mon fou ici,
01:12:57 :je vais afficher les deux, j'ai bien BMW et 100 et là on a deux éléments ici etjuste un ici et c'est le fameux message d'erreur qu'on a là, missing one requiredpositional argument, ah non l'erreur qu'on a c'est si je mets pas le self ici par contre,petite erreur, donc si je mets pas le self ici et que je mets juste la vitesse, là pareil
01:13:22 :on se dirait bon bah j'ai un paramètre ici, je lui envoie un argument, ça devrait êtrebon, je le lance et là got multiple, ok c'est pas ça que je m'attendais à avoir commeerreur, voiture, ok bon j'ai plus l'erreur que je voulais, j'ai le cerveau qui crame un
01:13:42 :petit peu mais si vous regardez la vidéo en fait il va vous dire qu'il s'attendaità en avoir un et on en a envoyé deux ou l'inverse je sais plus deux et on en a envoyéqu'un et là on comprend plus parce que justement on en a envoyé un, il y en a un, il nous
01:13:54 :dit qu'il en veut deux donc c'est là où ça devient confus et ce qu'il faut comprendreen fait c'est que quand on fait ça, quand on passe par l'instance pour afficher, doncje vais enlever mon vitesse ici, ce qui se passe en arrière plan quand je fais ça,donc là ça va marcher, ça m'affiche la marque, c'est que c'est la même chose que
01:14:10 :de passer par la classe directement et de passer à self ici notre instance et c'estlà qu'on voit clairement le mécanisme qu'il y a derrière, c'est que ok en fait le selfon lui passe bien quelque chose, c'est juste que là c'est pas nous qui le faisons, c'estPython automatiquement qui va faire le truc pour nous pour que ce soit plus facile à
01:14:29 :manipuler parce que c'est l'intérêt après quand on fait une voiture, on veut pouvoirdirectement faire voiture, affiche marque, voiture, point machin avec notre instancedonc là c'est un petit peu confus, il s'appelle voiture aussi mais je pourrais dire ma BMW,hop, voilà on n'a pas envie à chaque fois de passer par voiture et de lui dire affiche
01:14:47 :moi la marque de l'instance que j'ai créé, ça serait un petit peu chiant, on pourraitmais ce serait un peu chiant à chaque fois de devoir à chaque fois définir ce selflà et c'est là où finalement c'est là qu'on voit bien que si on passe ma BMW à
01:14:59 :self, bah du coup, et ça rejoint un petit peu ta question qu'il y avait tout à l'heure,c'est que là on comprend mieux si je mets pas de marque ici, on va enlever ce marque,on va mettre juste un passe comme ça, et là je vais faire self.marque et si je fais
01:15:17 :ça comme ça, hop, et que je fais ma BMW.marque égale à BMW et que là je lui passe et quelà je lance, là ça marche, parce que tu vois en fait on a défini un attribut marqueici sur ma BMW, ensuite on dit tout simplement ma classe voiture ici, elle a une méthode,
01:15:41 :une fonction en fait, qui s'appelle afficher marque, qui prend, là on pourrait mettrePatrick, là encore comme je vous dis c'est une convention, et là on lui dit ok, et làvous voyez que finalement ce qui est de l'orienter objet ça devient finalement juste en faitdes fonctions, c'est qu'on a une fonction associée à une classe, mais finalement si
01:16:03 :on sortait ça ici et que l'on enlevait, vous voyez, on revient juste à de la fonctionbasique, là c'est juste qu'on a tout ça qui est encapsulé dans une classe, et onlui dit ok, bah Patrick c'est égal à ce truc là, sur lequel j'ai défini marque,donc si j'affiche Patrick.marque, en fait c'est comme si tu fais ça, et du coup ça
01:16:23 :va t'afficher ce que t'as mis ici. Ok ? Donc, revoyez ça tranquillement, parce qu'il ya beaucoup de trucs qui se passent et il faut le voir plusieurs fois, il faut le testeretc, effectivement je vois des gens un peu confus peut-être, au final une fois qu'ona le déclic, une fois qu'on a compris, au début souvent les gens ils comprennent pas
01:16:46 :trop, ils l'utilisent, ça marche la plupart du temps, on vous dit tu mets self partout,tu le mets dans toutes tes méthodes, tu le mets partout ici, tu mets self, devant lenom de ta variable tu mets self, au début je me rappelle moi-même je faisais ça, jecomprenais pas, j'ai passé 6 mois à pas trop comprendre ce qu'il se passait, je mettais
01:17:02 :mes self partout, une fois de temps en temps ça plantait, ça me disait ce fameux erreurde positional argument, un seul donné etc, etc, on comprend pas, et une fois qu'on avraiment compris, je pense que c'est ma vidéo que je préfère, la vidéo d'une minutelà-dessus, là c'était un beau challenge, je sais pas si quelqu'un peut aller choper
01:17:21 :le lien sur Youtube, là si vous mettez self piton une minute vous devriez la trouver jepense, ou j'ai des petits graphiques justement, je vous montre comment ça change etc, revoyezlà, voyez là une fois, deux fois, trois fois, testez de votre côté, regardez lesformations sur l'orienté objet, et à un moment ça va faire le déclic, même une fois que
01:17:39 :vous aurez vu tout ça la première fois vous allez être perturbé, c'est pour ça quel'orienté objet ça prend du temps, il suffit pas de regarder 30 minutes de vidéo et hopon comprend comme ça, ça prend du temps, faut que ça décante, mais une fois que vousavez le déclic, après vous allez vraiment ne plus vous soucier de ça. Donc voilà,
01:17:55 :après faut pratiquer, pratiquer pour vraiment péter les choses, merci Arnaud pour le lien,donc faut vraiment casser les choses, essayer les choses, modifier tout ça, et c'est commeça que vous allez comprendre, tiens si je change là, si j'enlève l'attribut de classeet que j'en ai un sur l'instance, est-ce que ça marche, si je le change sur l'instance
01:18:14 :etc, qu'est-ce que ça fait etc, faut vraiment pas hésiter à tester, à essayer de casserles choses pour comprendre qu'est-ce qui se passe. Utilisez ID aussi pour voir comme
01:18:24 :on l'a vu avec les identifiants, quels sont les objets que vous avez etc, c'est importantde voir tout ça, de voir, mettez des listes, mettez des objets muables que vous pouvezmodifier, mettez-les en attribut justement de votre instance, de votre classe, mettezune liste là dans votre voiture, dans la classe vous mettez voiture créée, égale
01:18:44 :à une liste, créez des instances, créez des voitures, modifiez la liste, faites lesprint des ID pour voir ok la liste là, est-ce qu'on peut en créer plusieurs, est-ce qu'onpeut faire une copy de cette liste, est-ce qu'on peut la modifier, faut vraiment essayertout ça pour que ça rentre petit à petit. Est-ce que ça va ? Est-ce que votre cerveau
01:19:06 :a tenu le coup, le mien il commence déjà aussi un petit peu à, non ok. Après boncomme je vous dis, si vous n'avez vraiment pas du tout envie d'orienter objet, c'estnormal que là ce soit compliqué. Alors de pouvoir créer un attribut d'instance à
01:19:26 :la volée, oui après alors, là encore tu vois Al, c'est possible, souvent en faitles choses après, on avait un autre truc comme ça dans la dernière session, j'essayede me souvenir, c'était quoi un truc où j'avais dit, ah je sais plus, oui c'étaitpeut-être sur les listes, ah oui d'ailleurs c'était ça, la réponse entre les listes
01:19:50 :et les sets, la rapidité, où justement finalement en fonction de ce que vous faites, c'estça, j'avais noté, donc si vous avez besoin d'un accès rapide par index à des donnéesimmuables, le tuple est plus rapide que le set, et le set c'est par contre si vous avezbesoin de vérifier rapidement la présence d'un élément, là c'est plus rapide, mais
01:20:09 :du coup en fait c'est dicté par l'usage, et finalement vous pouvez utiliser les setsou les tuples pour l'un ou pour l'autre, pour vérifier par exemple qu'un élémentest présent dans une séquence d'éléments, vous pouvez créer un tuple avec des éléments,un set avec des éléments, si vous les modifiez pas les deux vont marcher, le set vous pouvez
01:20:26 :le modifier, le tuple non, mais si finalement vous avez un élément qui change pas vouspouvez utiliser l'un ou l'autre, et après c'est en fonction de ce que vous allez faire,c'est plus logique si vous allez pas le modifier du tout, d'utiliser un tuple du coup, parceque ça va indiquer par l'utilisation du tuple que vous avez pas l'intention de le modifier,
01:20:43 :alors que le set ça peut dire ok peut-être qu'on va le modifier quelque part, c'estmoins sûr, donc c'est ça, c'est pour ça qu'il y a des gens qui aiment pas Python,parce que surtout si vous venez de langages beaucoup moins permissifs, où il n'y a pas36 façons de faire les choses, vous allez pas aimer Python parce que vous allez vous
01:21:00 :dire mince en fait c'est trop permissif, ça crée le bordel, finalement en apprenantles choses comme je vous dis, quand vous allez dans les entreprises, quand vous faites leschoses, vous voyez que tout le monde appelle self, que personne n'utilise global, quequand vous faites ça tout le monde fait la même chose, et donc finalement petit à petit
01:21:17 :il y a des conventions qui se créent, et c'est juste une philosophie différente dedire ok on peut pas forcer les choses, parce que peut-être que, d'ailleurs c'est un peule zen of Python, c'est un peu ça justement, cette philosophie dans les grands principesde Python, de dire que les développeurs qui ont créé Python, ils se sont dit ok, nous
01:21:41 :on voit une façon bien de faire les choses, on l'écrit, on fait des conventions, laPEP 8, après peut-être qu'il y a des choses que les gens veulent faire différemment,qu'on n'a pas pensé, et qui ont des bonnes raisons d'être, c'est pour ça qu'à chaquefois je vous dis global c'est la merde, ça s'utilise pas etc, mais il y a des scripts
01:21:59 :dans lesquels des fois il y a des cas très très précis, on se dit ah ok bon là çapeut être bien pour débloquer un truc pour un usage très très spécifique, et donclà ça peut être pratique. Donc voilà, c'est l'avantage ou le désavantage de Python,
01:22:14 :ce qui est aussi un avantage par contre au terme d'apprentissage, parce que là encoreil y a des gens qui se disputent, il y a des gens qui disent ok c'est mieux d'avoir untruc plus compliqué à apprendre mais où c'est bien carré, il y a des gens qui se
01:22:26 :disent ok c'est plus simple d'avoir finalement des choses plus simples à apprendre mêmesi des fois il peut y avoir des effets de bord comme on l'a vu, c'est pas tout noirtout blanc. Voilà pour le petit monologue final, est-ce qu'il y a d'autres questions ?
01:22:40 :Comme je vous dis, j'imagine que vous avez plein de questions là, mais il faut vraimentaprès aller voir les cours, faire les exercices parce que c'est sûr que là j'imagine quevous êtes un petit peu perdus si vous n'avez jamais vu ça, mais je vous renvoie à plus.
01:22:53 :L'idée n'était pas de faire un cours théorique là-dessus parce que finalement je vais répétermes vidéos que j'ai passées des mois à faire bien pour que ce soit concis et préciset je vais les refaire en moins bien finalement, donc c'est mieux d'aller voir les vidéoslà-dessus. Donc ouais, ça a l'air de vous avoir plu du coup ce petit truc interactif
01:23:12 :là. Et oui oui, il y a plein plein plein de projets, moi toutes les entreprises danslesquelles j'ai bossé, là on avait des trucs avec des code base immense avec différents,moi c'était dans le milieu du cinéma, mais après j'ai vu d'autres choses aussi,là j'ai vu récemment, j'ai refusé un beau petit projet de startup qui était tentant
01:23:37 :mais j'avais pas trop le temps et qui était justement, il partait 100% en piton. Oui ouiil y a des projets, moi c'était immense, on était 35-40 développeurs, 100% en piton,il y avait un petit peu de C++ pour des trucs très spécifiques avec le VFX, mais ouaisc'était, et après comme je te dis, il y avait après dans des trucs comme ça, finalement
01:24:00 :t'as des linters, t'as des CI, CD, donc comme dans tous les trucs finalement, c'est çaaussi que je trouve, il y a beaucoup de gens qui disent ah oui mais regarde avec du C,du Java, c'est beaucoup plus cadré et tu peux pas faire les choses différemment, maisfinalement bon, il y a des bugs dans tous les projets du monde, peu importe si c'est
01:24:17 :écrit en C, en piton, en COBOL, en Javascript, donc je trouve que bon finalement, ce quifait qu'un projet bug ou pas, c'est pas le langage, c'est la rigueur des développeurs,c'est les processus que t'as, c'est comment les gens sont habitués à coder, commenttu encadres les gens pour qu'ils codent bien, tu peux faire, c'est sûr que le risque
01:24:33 :avec piton, c'est que si t'as aucun truc en place, rien, bah ça peut devenir trèsrapidement le chaos parce que chacun va faire le truc vraiment comme il le veut, ce quiva être moins le cas de base en C ou autre, mais voilà finalement on sait, on sait aussi
01:24:47 :si les choses, si t'as pas de convention, les gens peuvent nommer les trucs en majuscule,en minuscule, il y a plein de choses sur lesquelles en C, en Java, tu peux partir avec tes propresfaçons de faire et ça va causer des problèmes aussi, donc voilà finalement, ça limite
01:25:04 :des bugs à un problème, mais ce qui fait qu'il n'y a pas de bug, c'est d'avoirdes bons processus finalement. Après bon, il y a des développeurs d'exception, ça
01:25:13 :c'est sûr. Ok, bah écoutez, on va s'arrêter là, je vais continuer d'apprivoiser cet outildu coup, et puis on va retester des petites sessions là-dessus, là je vais continuerde voir pour que ce soit un peu plus fluide les prochaines fois, mais si ça vous a plu,c'est cool, je pense que c'est bien justement, comme je vous disais, de pas avoir des trucs
Aucune occurrence trouvée pour « ».