- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Simon
12 mars 2024 - 12 mars 2024 à 8:05
checkConversation résolue
2 réponses
Quel besoin de faire Utilisateur.__init__(self, nom, prenom) ici?
Bonjour, pourquoi dans la classe Junior de l'exemple de la vidéo, y a-t-il besoin d'écrire:: Utilisateur.__init__(self, nom, prenom) ? La classe Junior n'hérite-t-elle pas direment du constructeur de la classe …
Yann
29 août 2023 - 29 août 2023 à 12:18
checkConversation résolue
2 réponses
Super().__init__() dans l'héritage multiple
> class Parent1: def __init__(self): print("Parent1's constructor called") > class Parent2: def __init__(self): print("Parent2's constructor called") > class Child(Parent1, Parent2): def __init__(self): super().__init__() # Appel du constructeur du premier parent …
00:00:00 :Alors, dans cette partie, il va falloir un peu vous accrocher parce qu'on rentre dans des conceptsquelque peu avancés de la programmation orientée objet. On va voir dans cette partie ce qu'on
00:00:09 :appelle l'héritage. L'héritage, là encore, ça va nous permettre d'éviter d'avoir à répéter deslignes de code de façon inutile. Vous vous rappelez, on aime bien être ce qu'on appelle
00:00:19 :sec en Python, c'est-à-dire dry en anglais, don't repeat yourself. Il faut à tout prix éviter derépéter des lignes de code dès que c'est possible, et c'est précisément ce que l'héritage va nouspermettre de faire. Au-delà d'éviter la répétition de lignes de code, c'est carrément une logique,
00:00:34 :en fait, que je vais vous présenter ici, qui va nous permettre d'organiser notre code d'unefaçon plus efficace que ce qu'on aurait fait sans l'héritage. Donc, accrochez-vous, on commence
00:00:44 :tout de suite avec cette notion assez importante et quelque peu avancée de la programmationorientée objet. Donc, pour illustrer mon propos, j'ai décidé de partir sur un autre type de classe
00:00:54 :que ce qu'on avait jusqu'à présent, c'est-à-dire les voitures. On a dans ce cas-ci une classe quidéfinit un utilisateur. Donc, l'utilisateur, il va avoir un nom et un prénom en attributs. On a une
00:01:05 :méthode magique string ici qui nous permet donc de récupérer un affichage de notre instance. On vadonc afficher tout simplement utilisateur suivi du nom et du prénom de l'utilisateur en question,et on a une méthode ici affiché projet qui va passer à travers chaque projet ici et qui va les
00:01:21 :afficher. Vous remarquez qu'on a différents types de projets. On a des projets qui commencent parpr et un tiré du bas. Ça, c'est des projets en fait qui sont protégés et qu'on ne veut pas
00:01:31 :afficher à tout le monde. Donc, pour l'instant, on a créé un utilisateur qui s'appelle Paul Durandet on l'a créé à partir de notre classe utilisateur. Si j'exécute donc ce code, actuellement on va
00:01:42 :afficher les projets à partir de Paul et donc on va afficher tous les projets qui sont contenusdans ma liste projets. On affiche PR Game of Thrones, Harry Potter et PR Avengers. On affiche
00:01:53 :les trois projets mais nous ce qu'on va vouloir faire c'est commencer à créer différents typesd'utilisateurs puisque Paul Durand en fait ce n'est pas un utilisateur comme tout le monde,c'est un junior qui vient d'arriver dans l'entreprise et on ne veut pas qu'il ait accèsà tous les projets et notamment à ceux qui sont protégés. Donc Paul, on va vouloir le définir de
00:02:11 :la même façon que tous les utilisateurs sauf qu'il n'aura pas accès à ces projets protégés. Donc,on va pouvoir créer une classe qui s'appelle junior par exemple et actuellement sans l'héritagevous seriez tenté de prendre toute cette classe et de faire un copier-coller tout simplement.
00:02:27 :Vous renommez utilisateur en junior et dans la méthode afficher projet ici, il suffit de faireune structure conditionnelle en disant que si le projet ne commence pas, donc start with,if not project.start with et là on va mettre pr- du bas donc si le projet ne commence pas avec ça
00:02:47 :et bien on affiche le projet. Alors là je fais une petite erreur, voilà ici, donc si le projet necommence pas avec pr on affiche le projet. Donc là j'ai défini mon utilisateur Paul cette fois-ci
00:02:58 :comme un junior et si on relance le script et bien vous allez voir que cette fois-ci on ne vaafficher qu'un projet donc celui qui n'est pas protégé. Donc voilà Harry Potter ici,
00:03:07 :les deux autres projets ne sont pas affichés car ils commencent par pr et un tiré du bas.Sauf que là vous voyez qu'on a répété beaucoup de codes, on a répété la méthode init, la méthodestring et quasiment la totalité de notre méthode afficher projet, on a juste rajouté une ligne à
00:03:22 :l'intérieur. Donc ça ce n'est vraiment pas optimal et à la place ce qu'on va faire c'est créer unhéritage. Donc on va créer une classe junior en fait qui va hériter de notre classe utilisateur
00:03:32 :et qui va donc hériter de ces méthodes et de ces attributs. Et alors pour faire ça c'est làqu'on va utiliser les parenthèses, les fameuses parenthèses que dans une classe on n'est pasobligé de mettre mais qu'on peut indiquer ici et qui vont nous permettre d'indiquer à partir de
00:03:47 :quoi on veut hériter la classe junior. Donc je vais enlever tout ce code ici, je vais mettre unpass pour l'instant et on va dire que junior en fait elle hérite de utilisateur. Donc je copie
00:03:58 :utilisateur et je le mets entre les parenthèses. Donc on a une classe ici junior qu'on appelle uneclasse fille de la classe utilisateur. Utilisateur étant donc la classe parent. Ça c'est très
00:04:09 :intéressant puisque du coup on va avoir accès directement à tout ce qui est à l'intérieurde cette classe utilisateur. Sauf que pour l'instant il faut quand même qu'on puisse
00:04:16 :récupérer ces valeurs. Paul et Durand il faut qu'on les insère dans nom et prénom. Donc on vaquand même mettre une méthode init ici qui va récupérer le nom et le prénom donc de lamême façon que ce qu'on avait ici avec notre classe utilisateur. Sauf qu'on ne va pas copier
00:04:32 :ces lignes de code. On pourrait ça marcherait mais là encore on se répète. Ce qu'on va faire à laplace c'est qu'on va appeler cette méthode init de la classe parent. Donc ce qu'on peut faire
00:04:42 :et bien c'est tout simplement l'appeler en disant utilisateur init et en lui passant self, nom etprénom. Donc là vous voyez que on envoie ces valeurs de nom et de prénom à la méthode init de
00:04:54 :ma classe parent qui est la classe utilisateur. Donc on va envoyer ces informations, on va exécuterdonc cette méthode init et on va de ce fait avoir deux attributs donc le nom et le prénom et on passeself ici. Donc ça va nous assurer en fait que l'on crée bien ces attributs directement pour
00:05:10 :l'instance de Paul et si à la place de afficher projet ici je fais tout simplement un print dePaul vous allez voir que j'aurai bien le nom et le prénom de Paul. Donc j'exécute le script et
00:05:19 :on a bien utilisateur Paul Durand. Donc prenez un petit moment pour regarder ce qui se passe icisi c'est pas très clair pour vous. Là en fait c'est vraiment juste un appel de la méthode init de
00:05:29 :notre classe parent et on lui passe toutes les valeurs dont elle a besoin ici pour fonctionner.Et ensuite self.nom et self.prénom et bien ce sont des attributs qui vont être définis
00:05:37 :directement sur self. Self c'est égal à quoi et bien c'est égal à Paul. Donc quand on print Paulet bien on a bien utilisateur Paul Durand. Donc avec ça vous voyez qu'on commence à pouvoir
00:05:48 :réutiliser notre code. Ce qui est génial c'est que en plus avec l'héritage et bien comme je vousavais dit on a accès à toutes les méthodes qui sont définies à l'intérieur de notre classe parent.
00:05:57 :Vous l'avez vu quand on a fait un print de Paul ça nous a retourné automatiquement cette phraseici puisque cette méthode et bien on y a accès directement depuis Junior vu qu'elle est uneclasse fille en fait de notre classe utilisateur. De la même façon et bien afficher projet ici je
00:06:13 :vais pouvoir l'utiliser donc je peux faire Paul afficher projet et on va pouvoir avoir accès àcette méthode afficher projet à partir de la classe fille. Donc là on a bien les trois projets
00:06:22 :qui s'affichent et on a donc le même comportement que notre classe utilisateur. Donc voilà pourcette notion d'héritage donc si vous ne comprenez pas en fait je vous conseille de repasser sur lesdernières parties. Il est bien important de comprendre tout ce qui se passe ici avec self
00:06:36 :à quoi correspond self. Ici qu'on puisse appeler une méthode à partir de notre classe donc toutesces toutes ces notions là qu'on a vu dans les parties précédentes c'est important de bienles maîtriser pour comprendre ce concept d'héritage et ne vous inquiétez pas en faiton aura plusieurs autres cas de figure comme celui ci dans les parties qui vont venir avec
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.