objectif
Ajouter des métadonnées et exporter en dict/tuple proprement.
code minimal
from dataclasses import dataclass, field, asdict, astuple
@dataclass
class User:
id: int = field(metadata={"pii": False})
email: str = field(metadata={"pii": True})
u = User(1, "a@b")
print(asdict(u)["id"] == 1 and astuple(u)[1] == "a@b") # attendu: True
utilisation
from dataclasses import fields, dataclass, field
@dataclass
class Item: name:str = field(metadata={"slug":"n"})
metas = {f.name: f.metadata for f in fields(Item)}
print(metas["name"]["slug"] == "n")
variante(s) utile(s)
from dataclasses import dataclass, asdict
@dataclass
class P: x:int; y:int
print(asdict(P(1,2))["x"] == 1)
notes
- metadata est un mapping libre pour annoter vos champs.
- asdict/astuple produisent des copies récursives.