Session du 19 juin 2024 à 20h00
Pratique & Live Coding
Outils & IDE
DevOps & Environnement
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
Branches Git et héritage Python
Branches dans Git, extension Github VSCode, héritage en POO.
00:00:00 :Hop, c'est lancé. Bonsoir tout le monde, j'espère que vous allez bien. Deuxième session hebdomadaireaujourd'hui. Si vous avez besoin de révisions, de discuter d'un sujet, de refaire des choses
00:00:16 :ensemble, des exercices ou quoi, n'hésitez pas à demander, à poser vos questions.Que vous puissiez voir ça ensemble. Bonsoir Claude et pour les étudiantes AUSA et CPF,
00:00:28 :n'oubliez pas d'emplir votre feuille de présence qui est dans le chat.N'hésitez pas si vous avez des questions, si vous voulez qu'on parle d'un sujet,si vous voulez qu'on revoie un exercice, n'importe quelle chose. Et surtout pas, ces
00:01:11 :sessions là sont faites pour ça. Et après Thibaut fera aussi des séances sur un sujetprédéfini à l'avance aussi en plus pour compléter. Ouais Arcel.
00:01:23 :Ouais, en fait ma question est surtout tournée sur Git, parce que j'ai créé souvent desdépôts, parce que c'est d'ailleurs sur la base de Git. Sauf que je ne comprends pas
00:01:41 :l'architecture en général. Quand on parle par exemple de branches, je ne comprendspas exactement quand est-ce qu'il faudrait créer une branche sur Git.Après c'est Git en général, mais toi tu utilises GitHub ou GitLab ?
00:01:57 :J'utilise GitHub.Ok, c'est juste pour mon truc personnel, parce que GitHub est un peu plus simple d'utilisationpour te permettre de visualiser tout ça. Donc au niveau des branches déjà pour commencer,
00:02:12 :quand tu as un projet, tu as ton code de base, tu as ton main. Et quand tu vas créerune nouvelle branche qui va découler de ton main, tu vas recréer une copie de ton codeavec des modifications. Et ça va te permettre d'avoir plusieurs versions de ton propre code
00:02:35 :disponibles sur ces différentes branches. Par exemple, si tu travailles en entreprisecomme moi j'ai pu faire chez Orange, tu vas avoir le code d'une application, tu vas avoirla branche main qui est la branche de production, et après chaque employé va avoir sa branchesur laquelle il va travailler, où il peut déposer son code et push, sans problème
00:02:56 :que ça aille en production. Il peut même se faire des sous-branches à lui pour chaquepartie du projet. Ça te permet de t'organiser. Et une fois que c'est bon, que tu as par exemple
00:03:08 :une modification à push sur ton application, sur ton produit, tu vas faire un pull requestpour en gros merger ta branche, les modifications qu'il y a à ta branche, avec la branche principale.
00:03:19 :Et du coup comme ça, ce que tu as fait sur ta branche à toi, une fois que ce sera acceptépar un de tes supérieurs, par la pull request, par tes collègues, etc., selon comment ça
00:03:27 :marche en entreprise, le code va être fusionné avec la branche principale et tes modificationsseront disponibles en production. Ça sert à organiser ton code en plusieurs, un peu
00:03:36 :comme des répertoires, si tu veux, sur Windows. Je vais essayer de te faire un partage d'écranavec un paint pour t'expliquer.Imaginons que tu as ta branche principale qui est ici, c'est ta branche main.
00:03:58 :C'est ta branche principale où tu as le code par défaut. C'est là ton code et ton productionpar exemple. Et bien, cette branche main va avoir des sous-branches, une par employé
00:04:10 :ou une par version, ça dépend du projet. Par exemple, on va avoir un employé qui s'appelleJérémy qui aura sa branche, un employé qui s'appelle Kevin et un employé qui s'appelleArcel. Et chaque employé, on va lui donner le droit de propriété sur sa propre branche
00:04:30 :et lui, après, il va pouvoir faire des sous-branches par exemple. Ici, c'est pour le front-endde l'appli. Ici, c'est parce qu'il est en train de développer une feature de l'API.
00:04:41 :Là, c'est pour le système bancaire. Moi, par exemple, je vais t'amener à travaillersur la gestion des users et un truc sur la BDD. Chacun va avoir ses tâches, etc.
00:04:56 :Et une fois que tu as fini ton test, tu peux envoyer une pull request pour merger ton trucavec la branche principale, avec ton main. Comme ça, tes modifications sont apportées
00:05:10 :en main pour tout le monde et que derrière, tout le monde puisse faire un pull pour récupérertes modifications et c'est en production également. Est-ce que c'est plus faire comme ça ?
00:05:18 :Ça, c'est le truc basique au niveau des branches, le cas d'utilisation générale d'entreprisepour des employés ou sinon aussi pour des versions. Je vais essayer de te donner un exemple.
00:05:33 :Par exemple, c'est un framework Python. Par exemple, si le code est open source,tu peux aussi, toi-même, créer une propre branche. Par exemple, ici, tu as des branches
00:05:51 :pour chaque issue ou pour chaque fonctionnalité. Pour ne pas modifier directement la branchemain principale, tu vas créer par exemple cette user-là. Il a créé plein de features
00:06:05 :et pour chaque feature, il a créé une branche pour ne pas que tout soit mélangé.Les utilisateurs principaux utilisent aussi les branches pour les différentes versions.
00:06:14 :Comme ça, à la fois, le main, c'est la dernière version actuelle et à la fois,avec les anciennes branches, tu peux retrouver facilement les anciennes versions.
00:06:21 :Je ne sais pas si tu veux récupérer le source code de la 0.5 de ton application.Tu as juste à cliquer dessus et hop, tu récupères tout le code de la 0.5.
00:06:29 :Ça a plein d'utilités en fait. Ça te permet de faire du versionnage, ça te permet de séparerle code pour ne pas que tu overwrite sur ton code principal. Ça permet de mieux t'organiser.
00:06:43 :Il y a plein de bénéfices à utiliser tes branches. Après, ça dépend de ton utilité,projet perso, projet pro. Franchement, il y a beaucoup de choses qui peuvent être faites.
00:06:53 :Mais regarde, en général, que main, c'est ta branche principale.Souvent, ce que tu vas mettre en production, le truc qui est le plus à jour, le plus completet que tes sous-branches peuvent servir soit pour tes versions, soit pour des fonctionnalités,soit pour séparer des employés. Un petit peu tout ça. Est-ce que c'est plus clair pour toi ?
00:07:10 :Oui ? Ok, super.Il n'y a rien posté sur Github, Claude ? On répond juste après à toi, Simon.C'est quoi ton souci exactement, Claude ? Qu'est-ce que tu utilises pour poster sur Github ?
00:07:27 :Est-ce que tu utilises directement, tu uploads directement via le site ? Est-ce que tu utilisesl'extension d'un IDE, genre Visual Studio Code ? Est-ce que tu utilises Github Desktop ?
00:07:39 :VSC ? Est-ce que tu as connecté avec l'extension ton code qu'on s'appelle VSC à...Enfin, tu as connecté ton compte Github à VSC ?En attendant, n'oubliez pas pour ceux qui sont arrivés, si vous venez du Doza ou du CPF,vous avez la feuille de présence qui est épinglée.
00:08:05 :Oui, disons que j'ai essayé parce que je voulais voir un petit peu comment ça marche,mais moi je n'y arrive pas. Si j'avais une question, ce serait sur autre chose.
00:08:15 :En gros, normalement, si tu as ton extension, tu devrais avoir dans ton VSCode un petit boutoncomme ça où c'est ton contrôle de source. Et donc tu as un bouton pour justement publier
00:08:27 :sur Github. En appuyant sur ce bouton-là, l'extension va te demander de te connecterà ton Github. Moi, je suis connecté, je vais faire OK, et hop, ça va me connecter.
00:08:39 :Et du coup, je suis automatiquement connecté à mon compte Github. Et je peux choisirsi je veux déployer en public ou en privé. Et derrière, je peux sélectionner dans mon dossier
00:08:50 :ce que je veux upload. Par exemple, là, je veux upload le .pi qui est juste là.Je sélectionne mon .pi, je fais OK, et paf, ça m'a créé mon first commit.
00:09:02 :Et donc maintenant, si je vais par ici, ça a bien fait.Voilà, tu vois, hop, il vient de me le créer avec le nom que je lui ai donné.
00:09:18 :Et j'ai bien du coup mon truc qui s'est créé. Et maintenant, si j'apporte des modifications,par exemple, je peux rajouter un commentaire. J'enregistre. Je ne le détecte pas là,
00:09:36 :mais j'ai rajouté des restrictions. Voilà, hop. Quand il a du coup détecté un changement,tu mets ajout commentaire et tu peux directement commit et push comme ça.
00:09:55 :Bon, là, je ne suis pas connecté dans mon terminal, mais normalement, une fois que tu es connecté,tu peux directement push comme ça.Tu n'as pas cette extension là ?
00:10:08 :L'extension, je l'ai, mais comment dire, ça ne se présente pas de la même façon, on dirait.Et puis, il montre un fichier de texte et il veut absolument que je mette un commentaire et ça ne marche pas.
00:10:23 :Pour le coup, c'est bizarre.L'extension GitHub de base, quoi, qu'il y a avec VS Code.Ouais, comment dire, j'ai un gros bouton qui s'est marqué Valider.
00:10:40 :Ouais, tu avais ce bouton-là, en fait ?Non, je n'ai pas ce bouton-là, j'ai un gros bouton qui s'appelle Valider.Un gros bouton qui s'appelle Valider ?
00:10:51 :Ça, c'est un top tuyau.Ça, c'est un top tuyau.On peut repasser au fichier des éventuels ?Oui, Simon, si tu veux intervenir.Oui, vous m'entendez ?
00:11:31 :Moi, je voulais revenir sur ce que tu disais, Kévin, sur la création des branches.J'ai bien compris l'avantage qu'il y avait à faire ça en entreprise,pour que chacun travaille sur une fonctionnalité de son côté.
00:11:45 :Même pour tes projets perto, pour t'organiser, c'est pratique aussi.Voilà, c'était ça ma question, en fait.En quoi, dans un projet perso, ça peut être un plus de faire des branches ?
00:11:56 :Je n'ai pas bien compris.Ça peut t'organiser et ça t'aide à faire du versionnage,donc à avoir plusieurs versions de ton code au fur et à mesure, avoir un suivi.
00:12:08 :Ça te permet de refactoriser, d'avoir des features différentes,et de ne pas tout écraser.Par exemple, aujourd'hui, tu développes une nouvelle fonctionnalité.Imagine que tu n'as que ton main, tu vas la push sur ton main.
00:12:23 :Dans 5 jours, tu n'en veux plus de ta fonctionnalité,ou ça crée des bugs, ou je n'en sais rien.Tu es obligé de la supprimer à la main dans ton code,et de te remettre les mains un peu dans le cambouis pour le faire.
00:12:36 :Alors que si tu avais fait une branche pour cette fonctionnalité-là,et que tu avais sauvegardé ton ancienne version sur une branche,tu aurais juste eu à download directement la branche que tu souhaites,avec ton base code en local, et repush ça directement.
00:12:50 :Donc c'est un gros gain de temps, ça permet de mieux t'organiser,de mieux visualiser les différentes fonctionnalités que tu as faites,et de garder une trace de tes différentes versions,des différentes fonctionnalités que tu as créées, etc.
00:13:02 :Mais de toute façon, même si je fais ça sur mon main,je peux revenir en arrière ? C'est enregistré ?Oui, tu as les commits, mais...
00:13:13 :Mais si tu mélanges plusieurs features, si tu mélanges plusieurs trucs,tu vas faire comment à la fin ?Ou alors c'est des projets de taille, de toute petite taille.
00:13:24 :Si tu as trois fichiers, tu n'as pas besoin d'un versionning.Moi c'est rare que pour des petits projets, j'utilise des branches de versionning.Mais dès que tu as un projet un minimum gros, par exemple un site web...
00:13:38 :Des moments tu as un projet qui est en prod, de toute façon.Si c'est ton site web et que tu es en prod, tu fais comment ?
00:13:44 :Tu modifies, tu pouches, et tu mets en prod.Et c'est foireux.Tu vois, tu es obligé d'avoir toujours au moins...Oui, mais normalement les tests, on les fait avant de mettre en prod quand même.
00:14:02 :Oui, tu n'es quand même pas à l'abri qu'il y ait des problèmes derrière.Tu n'es pas à l'abri que tu veuilles revenir sur ton ancienne versionet au final ça ne te plaît pas.
00:14:13 :En production, c'est bien d'avoir du versionning.Et du coup, le système de branches de GitHub ou de GitLab,enfin de Git en général, te permet de gérer ça facilement.
00:14:22 :Pareil pour séparer les fonctionnalités.Et comme ça, tu as une branche par fonctionnalité.Comme ça, si tu veux aller récupérer le code d'une fonctionnalité en particulier,tu n'as juste qu'à aller la chercher.
00:14:31 :Ce n'est pas mélanger tout entre elles.Tu veux faire une modification ou tu veux créer une nouveauté.On imagine que tu es sur ton main.
00:14:40 :Tout d'un coup, tu t'aperçois en prod que tu as un souci.Tu fais comment ?Tu détruis tout.Tu vas corriger ton bug.Tu remontes en prod.
00:14:49 :Tu remets ce que tu avais mis de côté.Tu vois bien que dès le moment où tu as quelque chose...Si tu n'as pas quelque chose qui est en production, c'est juste pour toi.
00:14:56 :Hormis d'avoir une expérience sur le GitHub,parce qu'on te le demandera pour en entreprise.Hormis ça, ça ne sert à rien.C'est dès le moment où tu as quelque chose qui est en production,un site web ou autre,ou un outil que tu aimes bien utiliser.
00:15:13 :Sinon, tu ne pourras pas corriger tes bugset faire évoluer ton logiciel.Ce ne sera pas possible.Ok, je comprends mieux. Merci beaucoup.Pas de souci.
00:15:24 :Claude, je reviens sur le screen que tu m'as envoyé.Grosso modo, c'est pareil que moi.Moi, c'est en anglais et toi, c'est en français.Mais en gros, ici, tu appuies sur la petite flècheet tu as valider, pousser ou valider, push.
00:15:38 :Ah oui, j'ai pas vu.C'est ce que j'ai mis dans la conversation.C'est ce que je disais.Il y a une version où c'est obligatoire.
00:15:46 :Il faut mettre un commentaire.Oui, c'est ça.Donc en fait, il faut mettre ton message de ton commit.C'est ce qui sera écrit sur ton GitHub en commentaire de ton commit.
00:15:55 :Et du coup, si tu ne fais que valider, ça ne valide qu'eux.Mais après, il faut push.Alors que si tu appuies sur la flèche,tu as directement validé et push.
00:16:02 :C'est plus pratique.Ne t'embête pas.Et après, ça devrait être bon si tu connectes à ton compte.Après, des fois, il peut te demander aussi de te connecteren variable d'environnement avec ton user.name
00:16:16 :et ton user.code, tu vois.Oui, comme je disais, le 46, il te demande de mettre un commentaire.Donc on ne peut pas passer ça.C'est obligatoire.
00:16:31 :C'est obligatoire, pareil.Dans le champ messages, ici, tu mets quelque chose.Où ça ?Dans le champ messages, juste là.Ici, tu as un truc qui s'est marqué message, là.
00:16:42 :Au sud, valider.Dans ce champ texte-là, tu essaies de mettre...C'est quelques mots en général.Juste une très brève description de ce que tu vas push.
00:16:52 :Il y a souvent quelques mots.Par exemple, là, si tu veux push un cours sur l'APO,tu mets cours PO, tu vois.Ou alors, si tu corriges un bug,tu mets correction bug nanani.
00:17:04 :Le but, ce n'est pas de faire des phrases à rallonge.Bien souvent, quelques mots, ça suffit.Voilà, il faut mettre quelque chose.Et puis, ma deuxième question, tu l'as presque sous les yeuxparce que c'était le code que je voulais te montrer.
00:17:20 :Je voulais savoir si mes appels de fonctions sont bienpar rapport à un appel à une fonction dans une autre fonction,et ainsi de suite.
00:17:27 :Par rapport au code qu'il y a sur la capture.Si tu voyais, par exemple, des incohérencesdans la façon dont j'appelle les fonctions.Par exemple, le but, c'est qu'on met des noms,ça affiche les noms, on mélange.
00:17:45 :Et puis, toi, dans un fichier infopersonne,tu appelles une fonction avec le IF.Oui.Moi, ce que je conseille en général,c'est d'utiliser le IF name égale égale main.
00:18:02 :C'est là où tu vas mettre toutes tes instructionsde quand tu vas lancer le code.Je ne sais pas si tu l'as vu dans le cours, ça.
00:18:09 :Et quand tu veux faire l'exécution de quelque chose,par exemple, là, je ne l'ai pas fait, tu vois.Tu fais IF name égale égale main.
00:18:22 :Et là, tu mets tes instructions.Là, par exemple, je mettrai mes variablesque je veux définir au lancement.Je conseille de mettre ça,parce que ça permet que ton code va s'exécuterque quand tu le lances en fichier exécutable.
00:18:43 :C'est quand tu fais Python et le nom de ton fichier.En fait, si tu ne fais pas ça,imaginons que tu importes ton fichier dans un autre.
00:18:52 :En gros, ça va exécuter tout ton code,alors que ce n'est pas ce que tu veux.C'est une bonne pratique à prendre de direque quand tu lances le fichier manuellement,tu vas exécuter tes fonctionset que tu vas définir tes variables.
00:19:07 :Voilà, donc en gros,toi, tu le mettrais à partir de juste au-dessus là.Tu vois ?Nombreux personnes, ici, c'est les variables.Donc, tu peux la mettre dans ta condition IF name égale main.
00:19:22 :Pareil pour ta boucle.Pareil pour afficher infos aux personnes.Voilà, tu peux le mettre dedans.Ma question, c'est pas tout à fait ça.C'est est-ce que dans mes fonctions,les appels à appeler une autre fonction,dans la manière que je pratique,est-ce que c'est bon ou pas ?
00:19:45 :C'est ça qui m'intéresse.Là, par exemple, ici, là ?Oui, ou par exemple, dans le IF,IF est majeur,et puis que ça tourne dans la fonction est majeure,et ainsi de suite.
00:19:54 :C'est ça qui m'intéresse,de savoir si c'est bon ou pas.Ah, ok, d'accord, oui.Est-ce qu'il aurait fallules arrêter ?Oui, ça, c'est bon, ça.
00:20:21 :Ok, super.Il n'y a pas telle source d'erreur,et bien d'autres, comme il y a là.Il n'y a pas d'erreur,c'est juste que c'est un peu difficile.
00:20:35 :On avait proposé,il faudrait peut-être qu'onles arrête,mais on ne va pas faire ça,parce que je ne sais pas quoi faire, ça.Alors là, j'ai beaucoup bien la fonction,alors...
00:20:54 :Il y a quelqu'un qui a un micro d'ouvert,et qui envoie du son.On a une télé, on va faire comme ça, non ?Ici, au niveau de ta ligne âge,il y a un petit souci, là.
00:21:08 :Parce que, du coup,ici, par exemple, ton nom,tu récupères un input,donc c'est bien une string.Ah, ok.Mais, du coup, ici, ton âge,tu veux récupérer un int,donc tu mets un int de ton input,quoi que l'on vienne à dire.
00:21:29 :Mais c'est juste que ça m'a perturbé,parce que tu utilises fStringà d'autres endroits,et là, je ne sais pas pourquoi,tu as voulu utiliser la méthodestr directement,ton numéro de personne,genre c'est un int de base ?
00:21:42 :Non, non, non, c'est non.Non, ça, c'était juste pour voirune façon différente de faire du...Si c'est une string de base,dans tous les cas,tu peux utiliser les fString.
00:21:55 :Les fString,ce n'est pas que limité à printemps.C'est bon ?C'est bon, c'est bon.Est-ce qu'il y en a d'autresqui avaient des questions ?
00:22:23 :Des exercices qu'ils voulaient revoir ?Non, il n'y a pas de questions,pas d'exercices que vous voulez revoir ?Je suis là à aborder,n'hésitez pas.
00:23:00 :On a encore 20 bonnes minutes,s'il faut,donc il ne faut pas hésiter.Sans ça,si tu as un petit exerciceà nous faire faire,à tous ensemble,moi, je suis preneur.
00:23:15 :Oui, écoutez,s'il n'y a pas d'autres questions,je vais essayer de chercherquelques-unes.Merci.Vous n'êtes pas douteuse là, je crois ?Est-ce qu'il y a des sujets particuliersque vous aimeriez bien voir en exercice ?
00:23:30 :Je ne sais pas attendre ici.Héritage PO ?Ça ?Après,est-ce que tout le monde a vula programmation en TOBJ ici ?C'est un petit peu intermédiaire.
00:24:08 :Ok, bon, je vais vous faire...Ça, ça devrait être pas mal.Ok.Donc, celui-là.Comment créer simplement un héritageentre deux classes ?Donc,on va dire d'abordle sujet de l'exercice ensemble.
00:24:59 :On va se donner les indices s'il faut.Je vais demander si certains d'entre vousont des pistes.Et après, j'essaierai de faire çatranquillement avec vous.
00:25:08 :Ok.Pour commencer, du coup,dans l'exercice,il nous demande de faire hériterla classe cube de la classe shape.On doit en plus s'assurer que cette classe cubedoit hériter des attributsdéfinis dans la classe shape,donc à savoir les attributs x et yjuste ici,définis dans la méthode init,
00:25:29 :donc qu'on initialiseau début de la classe shape.Et comme un cube est en trois dimensions,on doit en plus ajouter un attribut zqui n'existe que dans les instances de la classe cubeet pas sur la classe shape.
00:25:42 :Ces trois attributs doivent être définis à zéro,et donc notre screen doit afficher ça.Est-ce qu'il y en a déjà qui ont des pistes ?
00:25:51 :Avant que j'affiche l'aideet qu'on en continue à en discuter.On est censé avoirdeux trucs flagrants dans la classe cubequi vont la différencier de la classe shape.
00:26:10 :Vas-y Sylla.D'abord il faut hériter cube d'abord de shapecomme dans l'exercice.Donc cube entre parenthèses, je mets shape.Ok, très bien.Donc ça c'est pour définir que du coupcube hérite de la classe shape.
00:26:26 :Voilà, il faut hériterd'abord il y a le init dans shape.Donc on va appeler la méthode super.Dans init, voilà.Super.Tu veux que j'appelle la méthode super ?
00:26:43 :Oui, dans le init de cube.Pour qu'il hérite déjà de x, y.Ok.Voilà.Maintenant il faut donnercomme on doit avoir y dans cube,il faut dans son init mettre y.
00:27:06 :Y ?Je crois.Y est défini là.Non z, pardon.Z est défini.Ok.Z qui du coup doit être défini à zéro.Oui.Ok.
00:27:18 :C'est tout ?2, 2, 2, 2, 2.Je pense.Peut-être si on exécute, voir si çaça donne quelque chose.Je vais demander avant quand mêmeà les autres, est-ce qu'il y en aqui n'ont peut-être pas compriscertaines choses là ou qui pensentque justement il y a des erreurs
00:27:54 :ou qui veulent rajouter des choses ?Je vais afficher l'aide en même temps.Moi je pense que c'est bon.Ouais, ok.Est-ce qu'il y en a d'autres qui pensentque c'est bon, peut-être pas bon,qu'il faut rajouter ?
00:28:04 :Il manque le self dans l'init.Il manque quoi ?Il manque le self dans l'init du super.Ici là ?Ouais, non.Est-ce qu'il faut mettre un self ici ?
00:28:16 :Ouais, non.Non, non.C'est une question, c'est pas...Moi j'écoute les propositions.Non, je crois pas si on met...parce qu'il est...du moins on appelle super et...
00:28:27 :Appeler super suffit pour le coup.Ouais.Ok.Du coup je résume.Pour dire qu'une classe hérite d'une autre classe,à la fin du nom de votre classe,vous mettez entre parenthèsesle nom de la classe dont vous voulez qu'elle hérite.
00:28:44 :Jusque là, très simple.Ensuite vous définissez votre méthodeinit classiquement,avec le nom de votre classe.Vous définissez votre méthode init classiquement,avec self.Self sert pour définir des attributs,donc des instances locales à votre classe.
00:28:58 :Donc ici par exemple z,on veut qu'elle soit définie que dans cube,comme c'est demandé là.Et pas dans shape,donc on va juste utiliser self ici.
00:29:07 :Et super du coup,c'est une méthode en Python,pour ceux qui connaissent pas,qui sert directement à récupérer,donc à appeler en fait,et obtenir la classe parentesans avoir besoin de la nommer explicitement.
00:29:18 :En fait vu qu'elle est définie ici,ça va du coup directement récupérerdonc la classe shape ici,et exécuter donc la méthode init de la classe shapepour récupérer ses attributs.
00:29:29 :Donc en fait, faire ça,ça revient à récupérer ces deux attributs là,de cette classe là.Et donc ainsi,si on définit cube à cube,x, y, z,ça va être récupérer x, y ici,et z ici.
00:29:41 :Est-ce qu'il y a des questions par rapport à ça ?Félicitations du coup Sylla,c'est très très très très bon.T'avais tout bon.Ça c'est simplement,comment simplement,faire un héritage.
00:30:03 :Vraiment la base.Est-ce que ça vous convient déjà ?On va pouvoir pousser après,on va peut-être faire un ou deux autres,je vais voir ce qu'il y a de sympa.
00:30:11 :Ok,on a deux ou trois autres sympas.Oui, Wilfrid, vas-y.Je vais démutter pour parler si tu veux Wilfrid.Je vais démuter pour parler si tu veux Wilfrid.
00:30:46 :Je vais démutter pour parler si tu veux Wilfrid.Ok, allô ?Oui.Voilà, en fait moi j'ai une préoccupation.Oui.Pourquoi ne pas déclarer le zau niveau de celf,de def init ?
00:31:07 :Où ça ?Là c'est défini dans le init.Oui mais,self, z,c'est ça.Voilà.C'est pas comme ça que ça marchela programmation en ontéobjet.
00:31:22 :D'accord.Ce n'est pas une fonction classique en fait.La programmation en ontéobjet,tu inities en fait des,comment ça s'appelle,des instances,des attributs de ta classe,des instances,qui doivent être définies dans la méthode d'initiation,donc init.
00:31:42 :Self c'est pour indiquer quec'est des attributs qui sont propres à la classeet que tu vas pouvoir utiliserdans toutes les autres méthodes de la classe.
00:31:48 :Et donc tu les définisuniquement avec self ici.Après tu peux aussi les mettre,maisil faut ici que tu le redéfinisses.Si tu mettais z là,ici il faut mettre ça.
00:32:01 :Sauf que nous ça nous intéresse pasparce qu'on veut juste que z soit défini à zéro.Donc on n'a pas besoin d'indiquer z là,pour dans notre cas on met directement zéro.
00:32:11 :Après oui, on pourrait,mais là ça répond pas à la question.Mais on pourrait.D'accord.On pourrait.C'est dans le cas où tu as z,tu lui attribues une valeur externeà la classe.
00:32:23 :Donc par exemple,si en fait je mettais mon z ici par exemple si tu veux.À ce moment là,moi je pourrais mettre çaet je pourrais mettre ça.
00:32:31 :Sauf que nous ici,on demande explicitementde les définir à zéro.Donc à ce moment là,on n'a pas besoinde le donnerd'une façon extérieurepuisqu'on veut qu'il soit dans tous les castoujours égal à zéro.
00:32:44 :Donc tu peux te contenter de ça.D'accord, ça claque moi.Super.Merci.Pas de soucis.Ensuite,on va fairedans le même jeuun truc pour détecter les erreurs,ça peut être pas mal.
00:33:04 :Ok.Tac.Pareil, ici on a deux classes.Donc avec Chihuahua qui héritede la classe Chien.Ici, le but c'est de trouver l'erreur d'héritagequi s'est glisséedans ce bout de code.
00:33:20 :Dans l'état actuel des choses,si on essaye d'afficherl'attribut racecomme l'instant Chien,on se retrouve avec une erreuren disant que du coup la classe Chihuahuan'a aucun attribut race.
00:33:35 :On peut le faire.Chihuahua n'a aucun attribut race.Ce qui est normal parce quemême si elle hérite de Chien,on n'a pas défini d'attribut racelocalement à la classe Chihuahua.
00:33:45 :Donc par rapport à ce qu'on vient de voir avant,d'où vient l'erreuret comment on pourrait la résoudre ?Justement, si on fait ça,on obtient bien Chihuahua.
00:34:00 :Vas-y Simon.Il manque le super,comme avait fait Sylladans l'exercice d'avant,dans la méthode initde la classe Chihuahua.Avant le self.nom égale nom,
00:34:21 :il faut rajouter superqui appelle la méthode initde la classe Chien.Et là, comme ça,on récupère l'attribut race.On le récupère bien,mais il n'est pas initialisé.
00:34:42 :Race, comme je vous l'ai dit,ici, on est dans l'autre casque j'ai expliqué à Wilfried tout à l'heure,où on ne lui a pas donné une valeur de base,il faut lui donner la valeur.
00:34:52 :Est-ce que certains saventcomment on donne cette valeur-làavec super et de cette façon-là ?Je pense qu'il faut passerà l'init de Chihuahua.Il faut donnerle paramètre race.
00:35:08 :Ici, donc ?Oui.Est-ce que tu veux dire aussi, Simon ?Moi, j'aurais rajouté,quand on crée l'instance,j'aurais rajouté quelque choseà ce niveau-là.
00:35:25 :Chien égale Chihuahuaentre parenthèses,je l'ai dit,j'aurais rajouté...Ah non, excusez-moi.Ça ne marche pas, mon truc.Non, c'était plutôt du coupce que Sylla a dit.
00:35:41 :Ici, on veut initialiserla valeur qui est ici,donc on va la mettre juste ici.Et là, ça va marcher.Ah oui, là, c'est ça.
00:35:51 :On met Chihuahua,donc c'est le nom de la classe.Alors là, oui, c'est le nom de la classe,mais en soi, c'est juste parce queici, on veut que ce soitle chien Chihuahua.
00:36:02 :Ok, d'accord.Maintenant, si je veux quela race du chien,ce soit un berger allemand,on met Chihuahua.Effectivement, je crois.Après, oui, bon là,c'était pas très malind'avoir mis le même nom,mais ici, en soi,c'est juste le nom de la race,c'est une variable.
00:36:16 :Je pense qu'on est pas malpour celui-là.Est-ce que c'est assez bonpour tout le monde, celui-là ?Je peux juste essayerde vous en trouver un autre.
00:36:33 :On va s'en faire un dernierpour la route,et on sera pas mal.On a l'air d'avoir des questions.Ok.Alors, je vais essayerde vous en trouver un dernierpour la route.
00:37:12 :Ça, ça va être sympa,sous forme d'un espècede petit jeu.Hop, nickel.Hop, ok.Là, on a doncune classe de PO classique.On a un jeu,je pense que celui-là,c'est un peu le truc typeque vous avez probablementtous fait.
00:37:40 :On a un petit jeuoù les personnages,ils ont une puissance,ils s'attaquent,ce genre de choses.Donc là,on veut simplifier notre codegrâce à l'héritage.
00:37:49 :On voit qu'ici,on a actuellement trois classes,donc magicien,gobelin, chevalier.Les trois,elles ont tous les troisnoms et prénoms.C'est la même chosepour les quatre.
00:38:00 :Enfin, ça se définitde la même manière,et la seule variable fixequi change,c'est la variable puissance.Donc ça marche,mais ce n'est pasle plus optimisé.
00:38:09 :Nous, ce qu'on nous demande,c'est de créer une classepersonnage.Ces trois classes-làvont hériter de cetteclasse personnage,et c'est elle,cette classe personnage,qui va s'occuper deinitialiser les attributsprénoms et noms.
00:38:22 :Donc on n'a pas besoinde trouver l'attributpuissance,qui lui, donc,va rester le seulpropre à chacunede ces classes-là.Est-ce qu'il y en aqui ont une petite idéede comment faire ?
00:38:33 :Pour l'instant,je note juste tout en hautla classe personnage.Je ne fais rien de plus.Est-ce qu'il y en aqui veulent s'y essayer ?
00:38:43 :Vas-y, Arcel.En fait, là,si on créeune classe personnage,ça signifie quetout le reste des classesvont hériterde la classe personnage.Et ensuite...
00:39:05 :Comment je fais ça, déjà ?Comment je fais en sorteque mes trois classeshéritent de la classe personnage ?Comment tu peux faire ça ?
00:39:16 :C'est ça ?Oui, c'est ma question.Comment je fais là, du coup,pour que mes trois autres classes,du coup, maintenant,héritent de celle-là ?
00:39:22 :D'accord.D'abord, sur la classe personnage,tu peux bien ajouterle init.Et sur l'init,tu peux mettre commeparamètre le prénom et le nom.Et...
00:39:43 :A part ça...Ok, j'ai défini ma classe personnage,mais pour l'instant,les autres n'héritenttoujours pas de cette classe.Ah oui.Comment je fais pour quemes autres classes héritentde cette classe-là ?
00:39:56 :Alors, sur la classe...Ça ne va pas très bien.La classe qui suit juste après,je pense que c'est magicien.C'est mieux comme ça ?
00:40:04 :Ouais.Ouais.La classe magicien,tu vas plutôt mettreune parenthèse,et puis tu vas mettrepersonnage parce quela classe magicienhérite des personnages.Ok.
00:40:18 :Je mets ça où ?À la fin ?Juste...Non, juste à la fin,les deux points.Ok.Ok.Tu fais ça que pourma classe magicien ?
00:40:29 :Ça suffit ?Non.On va faire la même chosepour la classe gobelin,et aussi pour la classe chevalier.Ok.Pour ça...Mais ce n'est pas tout.
00:40:39 :Ce n'est pas tout.Pour l'instant,ce n'est pas normal,je vous rassure.C'est juste que techniquementça marche,mais le but,c'est de l'optimiser.Ok.
00:40:49 :Donc c'est pas tout.Maintenant, tu fais quoi ?Je pense que...On peut faire...une méthode supersur le reste des classes.Ouais.Donc super.
00:41:02 :Point.Fini.Voilà.Ok.Et là,on va enlever...Partout,là on a le self,prénom et le self,nom.Ok.Donc ça,ça j'enlève partoutet je mets ça partout.
00:41:19 :Ok.C'est ça ?Oui.Ok.Comme ça,comme ça,et comme ça.Ok.Tu penses qu'on est tout bon ?Ouais,je pense.Il y a encore une erreur.
00:41:33 :Actuellement,tu récupères tes attributs,nom et prénom,de ta classe personnage,mais tu les définis pas.On l'a vu en exercicejuste avant,quand on définit pasexplicitementavec une valeur ici,mais qu'on utiliseles variables extérieures,il faut indiquerà la méthode initqu'on appelle avec super,les variables
00:41:57 :qu'on peut lui donnerpour définirl'instance de nos variables.Il faut qu'on leur donneles valeurs.Comment on fait ça ?Alors,c'est pas trop...
00:42:09 :Je n'ai pas le temps.Par exemple,on a mis Chihuahual'exercice juste avant,quand on voulait que la racesoit Chihuahua.Là,on veut que nos nomset prénomssoient les nomset prénomsde notre classe.
00:42:25 :C'est au même endroitque l'exercice juste avant.Je pense qu'il fautles passer dans le super.Je vais essayer de voirs'il y arrive.Je pense qu'il fautfaire les deux argumentsdans la méthode super.
00:42:46 :Je vais essayerde demander à Arcels'il y arrive.Arcel, est-ce que tu as une piste ?Est-ce que tu vois à peu prèsoù on peut le mettre ?
00:42:55 :Il t'a déjà donné un indice.C'est au niveau dessusde la ligne avec super.Maintenant, c'est où ?Juste dans la parenthèsedes unités.Ici ?
00:43:06 :Oui.Je le mets comment ?Avec des guillemets ?Pas des guillemets ?Je pense qu'on les metavec des guillemetsparce que là,je n'avais pasde connexionet on était en plein exerciceavec les chihuahuas.
00:43:23 :Je mets prénom et nomcomme ça ?Oui.C'est techniquementmais ça ne répond pasà la consigne.C'est bien au bon endroit.Ici, tu donnes biendes valeurs pournom et prénom.
00:43:48 :Sauf qu'en l'occurrence,ça ne va pas êtreles valeursde ta classe magicienque tu auras donnéà ta classe magicien.C'est-à-dire que maintenant,si je veux définirun magede ma classe magicienet que ce magicien-là,je ne sais pas,je vais l'appelerRonald Weasley.
00:44:06 :Quand je vais afficheraprès par exemplequ'on s'appelleles attributs de mon mage,il va me direque mon magiciens'appelle prénom-nom.Est-ce que tu comprendspourquoi ?
00:44:23 :Je vais te le faireavec une méthode simplepour que tu comprennes.Imaginons que là,tu fais afficherune méthode affichéeprénom.Il prend un argumentprénom.
00:44:37 :C'est comme si ici,je faisais un printprénom.Et que derrière moi,je faisaisafficher prénomKévin.Je suis content quand même.Du coup,là je pense qu'on vamettre 5 guillemetspour qu'on montrele prénomqui a été miscomme par un mage.
00:45:07 :Ici, c'est de passerles variableset pas directementune valeurparce que ces variables-làc'est avec init.C'est quand on créenotre magicienqu'on va donnerces variables-là.
00:45:18 :C'est quand à la créationde notre instancede classe,quand on va donnerles valeurs qu'on veut,on veut que ce soitces valeurs-làqui soient utilisées.
00:45:28 :C'est pour ça qu'on réutilisece qu'on a définijuste ici.C'est plus clair comme ça ?Oui.C'est la même chose,on le met partout.
00:45:39 :Au niveau des puissances,on est bien à 80, 20, 70.Là, on devrait être pas mal.En l'occurrence,oui, c'est validé.Ok.C'est bon, c'est clairpour tout le monde ça ou pas ?
00:45:53 :Est-ce que vous voulez qu'on repassesur un truc en particulier ?Félicitations à toipour avoir été jusqu'au bout,Marcel.Merci.Ça vous fait une petite introductionà l'héritageet au concept simple.
00:46:10 :On aura vucomment une classehérite d'une autre.On met entre parenthèses.Quand on veut que cette classe-làhérite d'une autre,on met le nom de la classe parententre parenthèses.
00:46:22 :Si on veut récupérerles attributs de la classe parent,on utilise la méthode superavec init.Si les valeurs sont définiespar défaut de base,par exemple,si je définissais mon prénomcomme ça,je n'aurais pas besoinde le mettre entre parenthèses.
00:46:38 :Maintenant,si je veux que ma variableait une valeurque je lui donnede façon extérieure,en la définissant icicomme dans une fonction classique,je vais devoir préciserentre parenthèsesà ma fonction initsoit directement la valeur,soit une variablequi contient la valeur,l'un ou l'autre.
00:46:59 :Voilà tout ce qu'on a pu voirpour aujourd'hui.Rien ne vous empêcheici de définirun attribut propreà chaque classeoù là ce seraitune variable fixepropre à chaque classeet qui ne viendra pasde la classe parent.
00:47:17 :Je pense qu'on est pas mal.Est-ce qu'il y a des questionsavant qu'on conclue ?Il n'y a pas l'aird'y répondre.Écoutez,le cours sera en dissonanceen rediffusionsi vous avez besoinde vous remettreun petit peu dessus.
00:47:51 :Si vous voulez,je peux vous envoyerle lien des trois exercicesque je vais retrouvertrès rapidement.Il y avait celui-là,celui-là,et celui-là.Ça c'est le premieravec les cubessur la création.
00:48:13 :Ensuite,vous avezcelui-là sur l'erreuravec super.Et enfin,vous avez celui-làoù on a revuun petit peu toutet on a vite la répétitionpour optimiser un code.
00:48:29 :Ok.Écoutez,s'il n'y a pas d'autres questionsni rien,je vais vous souhaiterune bonne soirée.Ceux qui viennent du Tozaou du CPF,n'oubliez pasde remplir la feuille de présence.
00:48:40 :Je vous la renvoie dans le chatune dernière fois.Et puis, écoutez,normalement,si je ne dis pas de bêtises,Thibaut devrait faire un courspour les Toza demain.
Aucune occurrence trouvée pour « ».