- 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
al
15 avril 2024 - 15 avril 2024 à 23:07
checkConversation résolue
3 réponses
ClassVar
```python from typing import ClassVar @class User: first_name: str last_name : str c: ClassVar[int] ``` Si je comprends bien ce cas, en fait ClassVar permet de créer une variable de …
00:00:16 :Par exemple, un paramètre pour le prénom et un paramètre pour le nom de famille.Et si on veut associer les valeurs qui vont être envoyées à ces paramètres lors de la création d'une instance à des attributs d'instance,on va devoir répéter à chaque fois les paramètres.
00:00:28 :Donc on va se retrouver avec le firstname et le lastname qui sont répétés à chaque fois trois fois.Donc c'est un petit peu long à faire et heureusement depuis la version 3.7 de Python,
00:00:38 :grâce aux annotations de type notamment et à un module qui s'appelle Data Class,on va pouvoir simplifier ce processus et c'est ce qu'on va voir dans cette vidéo.
00:00:47 :Les Data Class, c'est ce qu'on appelle donc en français les classes de données.C'est un nouveau module qui permet d'avoir accès à un décorateur et à des fonctions qui vont être générées automatiquement,notamment les méthodes spéciales comme init et repre qui sont des fonctions que l'on retrouve dans la plupart des classes que l'on a besoin de créer.
00:01:05 :Donc pour vous montrer à quoi ça peut ressembler, on va importer depuis le module Data Classes, le décorateur Data Class.Si je crée ensuite une classe utilisateur, je vais pouvoir rajouter le décorateur donc avec l'arrow base au-dessus de ma classe.
00:01:19 :Et ensuite on va pouvoir grâce aux annotations de type définir des paramètres avec leur type et éventuellement des valeurs par défaut.Donc si je remets le paramètre FirstName, on peut spécifier que ça doit être une chaîne de caractères.
00:01:31 :On va faire pareil pour LastName avec là encore une chaîne de caractères.Donc tout ce que je viens de faire ici avec le Data Class, c'est exactement la même chose que si j'avais fait un init.
00:01:53 :Avec également ici les annotations de type que je devrais associer aux paramètres dans la méthode init.Donc vous voyez c'est vraiment beaucoup plus simple à décrire comme ceci.
00:02:09 :Vous allez voir également avec cette syntaxe ici qu'on a la méthode rep qui va être automatiquement générée.Donc pour vous montrer ça, je vais créer une instance à partir de mon utilisateur.
00:02:18 :Donc on va dire par exemple Patrick égal à User et en FirstName on va passer Patrick, donc la chaîne de caractères Patrick.Et en LastName on va passer la chaîne de caractères Smith.
00:02:29 :Et ensuite je vais afficher la représentation de mon instance.Donc je sauvegarde le fichier et je l'exécute avec une version de Python qui est supérieure à la version 3.7.
00:02:39 :Dans ce cas-ci cette version ici c'est la version 3.8.Donc si je rentre dans un interpréteur Python vous voyez ici que j'ai la 3.8.2.Et si je reviens donc sur ma ligne de code, vous voyez qu'automatiquement on a une représentation de notre classe qui est effectuée.
00:02:52 :Donc avec la classe, le paramètre et les valeurs qui ont été utilisées pour générer mon instance.Donc tout ça s'est fait automatiquement que ce soit la méthode init.
00:03:00 :Vous voyez ici on a pu créer une instance en passant des valeurs à ces paramètres.Et si j'affiche donc Patrick.FirstName et Patrick.LastName on va bien retrouver ces attributs qui sont associés à mon instance.
00:03:12 :Si jamais vous souhaitez donner des valeurs par défaut à ces paramètres, il suffit de le rajouter après la notation de type.Donc en mettant un symbole égal.
00:03:20 :Donc dans mon cas je vais laisser le FirstName comme un paramètre obligatoire.Mais pour le LastName on pourrait passer par exemple une chaîne de caractères vide.
00:03:26 :Ce qui nous permettrait de créer un utilisateur sans passer de nom de famille.Et dans ce cas-ci je pourrais quand même créer donc un utilisateur.
00:03:33 :Si je sauvegarde et que je relance le script, vous voyez qu'on n'a pas d'erreur.Alors que si j'enlève le symbole égal avec la chaîne de caractères et que je relance le script, là vous voyez qu'on a une erreur typeError.
00:03:42 :Puisqu'il manque un argument ici lors de la création de l'instance.Donc très facilement comme ça on peut rajouter des valeurs par défaut.Tout comme on le ferait avec les annotations de type si on passait par une méthode init classique.
00:03:54 :Également vous vous demandez peut-être comment faire si vous souhaitez créer des attributs de classe.Puisque là on est directement au niveau de notre classe.Et on crée des attributs qui finalement vont être des attributs d'instance.
00:04:05 :Donc comment est-ce qu'on peut faire pour indiquer à Python que certains attributs peuvent être des attributs de classe ?Et bien on va le spécifier avec là encore les annotations de type.
00:04:14 :Donc pour ça on va importer depuis le module typing la classe classeVar.Et on va l'utiliser dans l'annotation de type.Donc imaginons ici que je veux créer un attribut qui s'appelle par exemple c'est tout simplement.
00:04:26 :Donc on va rester sur quelque chose d'assez abstrait mais c'est juste pour l'exemple.Et que je veux que c'est soit de type nombre entier.On va donc mettre classeVar ici et entre crochet on va spécifier le type.
00:04:36 :Si je fais un print de Patrick à ce niveau là.Donc là je vais remettre un nom de famille puisque j'avais enlevé ma valeur par défaut.
00:04:42 :Donc je fais un print de Patrick et on va afficher le dictionnaire.Donc tous les attributs qui sont associés à cette instance.Pour ça on peut utiliser cet attribut spécial.
00:04:51 :Et si je lance le script vous voyez qu'ici on a bien uniquement firstname et lastname.Qui sont des attributs sur notre instance et on n'a pas l'attribut c.
00:04:59 :Puisque l'attribut c il va être au niveau de la classe.Et cette fois-ci si je fais user.dict donc ma classe et que j'affiche les attributs de ma classe.
00:05:08 :Vous allez retrouver quelque part là dedans si j'arrive à le retrouver.Puisqu'il y a beaucoup de choses je vais faire un petit dézoom.On devrait retrouver ici notre attribut et il est effectivement ici donc l'attribut c.
00:05:18 :Donc on a bien firstname, lastname et on a également l'attribut c qui se retrouve au niveau de ma classe.Donc si vous souhaitez faire des attributs de classe c'est tout à fait possible.
00:05:27 :Et pour ça il suffit d'utiliser class var et de spécifier à l'intérieur des crochets le type de données.Si on souhaite spécifier une valeur par défaut là encore il suffit de rajouter le symbole égal.
00:05:37 :Et la valeur par défaut que vous souhaitez assigner.Donc par exemple ici on pourrait mettre une valeur par défaut de 0.Également si vous avez besoin d'effectuer certaines actions après l'initialisation de votre instance.
00:05:48 :Vous pouvez le faire grâce à la méthode post init.Donc c'est une méthode spéciale là encore.Donc on la précède et on la suit de deux tirés du bas.
00:05:56 :Et on va l'appeler post tiré du bas init avec deux tirés du bas à la fin.Donc ça fait beaucoup de tirés du bas dans tous les sens.
00:06:02 :Mais cette méthode elle va être appelée automatiquement après la méthode init.Donc ici par exemple on pourrait calculer un autre attribut à partir des deux premiers attributs ici.
00:06:10 :Donc on pourrait par exemple faire un attribut full name qui est égal à self.firstname.Un espace et self.lastname tout simplement.Donc là si je reprends Patrick et que je fais Patrick.fullname.
00:06:22 :On va pouvoir accéder à cet attribut qui va être calculé automatiquement après la méthode init.Donc je sauvegarde et je relance le script.Et là vous voyez qu'on a bien le nom complet de Patrick.
00:06:32 :Donc Patrick Smith avec le prénom et le nom de famille qui sont mis les uns à la suite des autres.Donc tout ça ici finalement c'est juste une façon de créer automatiquement cette fameuse méthode init.
00:06:42 :C'est notamment très pratique quand vous avez beaucoup d'attributs comme ça à définir.C'est assez pénible de devoir tous les mettre à l'intérieur des parenthèses avec les annotations de type.
00:06:51 :Et si jamais vous avez des valeurs par défaut ça peut vraiment faire des lignes qui deviennent assez longues.Vous pouvez bien sûr mettre tout ça à la ligne.
00:06:57 :Là par exemple si on voulait mettre firstname sur une première ligne.On pourrait aller à la ligne et mettre également le self sur sa propre ligne.
00:07:03 :Donc c'est une façon de faire qui peut être utilisée également.Mais personnellement je trouve que ce n'est pas très beau.On ne comprend plus trop à quoi correspondent toutes ces lignes.
00:07:10 :Alors qu'avec les paramètres et les annotations de type comme ça directement au niveau de la classe.Je trouve ça beaucoup plus clair.Donc voilà pour les data classes, les classes de données en français.
00:07:20 :C'est vraiment une nouveauté géniale de Python.Je ne peux plus m'en passer personnellement.Personnellement je ne peux plus m'en passer.J'ai vraiment pris l'habitude de créer mes classes avec cette façon de faire.
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.