La souplesse et les facilités qu'apportent les dataclasses, me font penser qu'un jour les dataclasses se retrouveront mises en avant dans Python et soient dans le futur, le moyen natif de créer des classes.
(le notebook ci-dessous se retrouve sur mon github)
1) Comment savoir quel sera le comportement du constructeur de la classe ?
Le constructeur de la classe est généré par la dataclasse et il n'est pas visible en l'état.
Pour comprendre ce qui va se passer, on utilisera le module 'dis' qui permet de désassembler le code Python. Un source Python est traduit en bycode qui sera exécuté par la VM Python. Le module 'dis' montre la traduction qui sera faite de ce bytecode.
Exemple: Soit une classe dont le constructeur attend deux paramètres ident et nom.
Sur le listing, on retrouve sans trop de difficulté les deux opérations d'initialisation du constructeur.
2) Dans le cadre de l'héritage, Dataclasse prend en charge pour vous l'appel du constructeur de la classe mère.
Dans le cadre de l'héritage, il est parfois nécessaire de faire appel à super().__init__(...) pour initialiser les attributs de la classe mère.
Dans la classe fille:
Avec les dataclasses c'est plus simple:En reprenant la dataclasse Exemple, on voit que le constructeur prend en charge les paramètres pour la classe mère et la classe fille
3) Comment déclarer une variable de classe.
On va devoir utiliser le module typing
Avec l'initialisation de la variable de classe
4) Utilisation d'un attribut mutable (exemple: une liste ) dans le constructeur.
Dans cet exemple : l'attribut mail ne sera pas initialisé par le constructeur. Par contre ma_liste va poser un problème et provoquera l'erreur suivante:
Il faudra passer par une fabrique :
5) Il est possible d'adapter le comportement général de la classe en passant des paramètres au décorateur.
Génération du constructeur, de la méthode __repr__ etc.
Ne pas hésiter à consulter la documentation du module par la commande help('dataclasses') ou directement dans une console pydoc dataclasses
Aucun commentaire:
Enregistrer un commentaire