objectif
Créer des objets immuables et valider les champs au démarrage.
code minimal
from dataclasses import dataclass, field
@dataclass(frozen=True)
class User:
name: str
age: int = field(default=0)
def __post_init__(self):
if self.age < 0:
raise ValueError("age négatif interdit")
u = User("Ada", 30)
print(u.name == "Ada" and u.age == 30) # attendu: True
utilisation
from dataclasses import dataclass
@dataclass(frozen=True)
class Point: x:int; y:int
p = Point(1,2)
print((p.x, p.y) == (1,2))
variante(s) utile(s)
from dataclasses import dataclass, replace
@dataclass(frozen=True)
class C: x:int
c = C(1)
c2 = replace(c, x=2)
print((c.x, c2.x) == (1,2))
notes
- replace() crée une copie modifiée d’un dataclass frozen.
- Validez tôt pour éviter des états invalides en aval.