PaliSkill
Python avancé

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