Leçon 8 / 9 — Chapitre 3: POO : méthodes spéciales, propriétés et dataclasses
@dataclass : générer automatiquement __init__, __repr__ et __eq__
Pour une classe qui ne fait que stocker des données, écrire __init__, __repr__ et __eq__ à la main devient répétitif. Le décorateur @dataclass (module dataclasses) les génère automatiquement à partir des attributs déclarés.
from dataclasses import dataclass
@dataclass
class Produit:
nom: str
prix: float
stock: int = 0
p = Produit("riz", 5, 20)
print(p)
Ce code affiche Produit(nom='riz', prix=5, stock=20) : @dataclass génère automatiquement __init__ à partir des attributs annotés (nom: str, prix: float, stock: int = 0, avec valeur par défaut vue au premier chapitre), ainsi qu'un __repr__ lisible, sans qu'aucun des deux n'ait été écrit à la main.
a = Produit("riz", 5, 20)
b = Produit("riz", 5, 20)
print(a == b)
Ce code affiche True : @dataclass génère aussi __eq__, qui compare automatiquement tous les attributs — exactement le comportement écrit manuellement à la leçon sur __eq__, obtenu ici gratuitement.
@dataclass reste une classe Python normale : on peut toujours y ajouter des méthodes propres, comme valeur_stock vue précédemment, en plus des attributs déclarés.
À vous de jouer : transformez une classe déjà écrite avec un __init__ manuel en @dataclass, et vérifiez que print() et == fonctionnent sans avoir écrit __repr__ ni __eq__.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 87 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès