Codectionary / Developer documentation / Python

Dataclasses and Independent Defaults

dataclass generates initialization, representation and equality methods from annotated fields. default_factory creates a separate mutable default for each instance; annotations do not validate runtime values. Run as a Python 3.11+ script.

Syntax

@dataclass; field(default_factory=list)

Examples

Dataclasses and Independent Defaults

Run as a Python 3.11+ script.

from dataclasses import dataclass, field
@dataclass
class Basket:
    owner: str
    items: list[str] = field(default_factory=list)
a = Basket("Ada")
b = Basket("Lin")
a.items.append("tea")
print(a)
print(b.items)
  1. Expected output: Basket(owner='Ada', items=['tea']) []
  2. Each constructor calls list independently. Appending to Ada’s basket therefore leaves Lin’s basket empty.

Best practices

  • Use default_factory for mutable field defaults.
  • Implement validation in __post_init__ when a model requires runtime invariants.

Runtime & versions

Python interpreter. Feature availability depends on the language and runtime version used by your project; consult the official reference below.

Python language reference

Specifications & further reading