← retour aux snippets

dataclasses: metadata des champs et asdict/astuple

Ajouter des métadonnées et exporter en dict/tuple proprement.

python dataclasses #dataclasses#metadata#asdict

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.