dataclasses (stdlib) auto-generate __init__, __repr__, and comparison methods for data-focused types—similar to C# record or Java records for plain data carriers.
Basic dataclass
from dataclasses import dataclass
@dataclass
class Product:
sku: str
price: float
qty: int = 0
frozen and field()
from dataclasses import dataclass, field
@dataclass(frozen=True)
class Config:
host: str
tags: list[str] = field(default_factory=list)
Use default_factory for mutable defaults—same rule as function defaults. frozen=True makes instances immutable.
Important interview questions and answers
- Q: dataclass vs namedtuple?
A: Dataclasses are mutable by default, support defaults and methods; namedtuple is tuple subclass—immutable and lighter. - Q: Type annotations required?
A: Fields need annotations for dataclass generation—also documents shape for type checkers.
Self-check
- What decorator marks a dataclass?
- How provide a default empty list safely?
Tip: Use field(default_factory=list) for mutable defaults—same rule as function defaults.
Interview prep
- dataclass vs regular class?
Auto-generates __init__, __repr__, comparisons—less boilerplate for data carriers.
- default_factory why?
Avoids shared mutable defaults on dataclass fields—same pitfall as function defaults.