field() customizes dataclass fields with defaults, metadata, and factories.
1from dataclasses import dataclass, field2from typing import ClassVar34@dataclass5class User:6 name: str7 email: str8 age: int = 09 tags: list[str] = field(default_factory=list)10 _id: int = field(init=False, repr=False)1112 def __post_init__(self):13 self._id = hash(self.name + self.email)1415# Usage16user = User(name="Alice", email="alice@example.com")17print(user) # User(name='Alice', email='alice@example.com', age=0, tags=[])1819user.tags.append("admin")20print(user.tags) # ["admin"]2122# With metadata23@dataclass24class Product:25 name: str = field(metadata={"max_length": 100})26 price: float = field(metadata={"min_value": 0})2728# Frozen dataclass29@dataclass(frozen=True)30class Point:31 x: float32 y: float3334p = Point(1.0, 2.0)35# p.x = 3.0 # FrozenInstanceError!3637# Slot dataclass (Python 3.10+)38@dataclass(slots=True)39class Optimized:40 x: int41 y: int
field() options:
default: default value.default_factory: callable for mutable defaults.init: include in init.repr: include in repr.compare: include in eq.metadata: dict for custom data.