field metadata — attach custom data to dataclass fields.
1from dataclasses import dataclass, field, fields23@dataclass4class User:5 name: str = field(metadata={"max_length": 100, "required": True})6 age: int = field(metadata={"min_value": 0, "max_value": 150})7 email: str = field(metadata={"pattern": r"^[^@]+@[^@]+$"})89# Access metadata10for f in fields(User):11 print(f.name, f.metadata)12 # name {'max_length': 100, 'required': True}13 # age {'min_value': 0, 'max_value': 150}1415# Use metadata for validation16def validate(obj):17 for f in fields(obj):18 value = getattr(obj, f.name)19 meta = f.metadata20 if "max_length" in meta and len(str(value)) > meta["max_length"]:21 raise ValueError(f"{f.name} too long")22 if "min_value" in meta and value < meta["min_value"]:23 raise ValueError(f"{f.name} too small")
Use cases: