dataclasses and __slots__
You are a Engineering Manager on-call. A production issue might involve dataclasses and __slots__. How do you diagnose and mitigate?
Answers use simple, clear English.
Quick interview answer
Mitigate first, then root-cause. Check symptoms against: Mutable default list in dataclass field; forgetting frozen for dict keys..
Detailed answer
Mitigate first, then root-cause. Check symptoms against: Mutable default list in dataclass field; forgetting frozen for dict keys.. Validate with: Use field(default_factory=list); kw_only=True for clarity in large models.. Context: @dataclass auto-generates __init__, __repr__, __eq__. slots=True (Py3.10+) fixes attributes and saves memory. frozen=True makes instances hashable if all fields hashable. Core: @dataclass auto-generates __init__, __repr__, __eq__. slots=True (Py3.10+) fixes attributes and saves memory. frozen=True makes instances hashable if all fields hashable. Real-time example: DTO layer: @dataclass(slots=True) OrderItem(sku: str, qty: int, price: Decimal). Pros: Less boilerplate than manual classes; slots reduce per-instance dict overhead. Cons: Inheritance with slots tricky; default mutable fields need default_factory. Common mistakes: Mutable default list in dataclass field; forgetting frozen for dict keys. Best practices: Use field(default_factory=list); kw_only=True for clarity in large models. Audience level: Engineering Manager.
Full explanation
@dataclass auto-generates __init__, __repr__, __eq__. slots=True (Py3.10+) fixes attributes and saves memory. frozen=True makes instances hashable if all fields hashable.
Real example & use case
DTO layer: @dataclass(slots=True) OrderItem(sku: str, qty: int, price: Decimal).
Pros & cons
Pros: Less boilerplate than manual classes; slots reduce per-instance dict overhead. Cons: Inheritance with slots tricky; default mutable fields need default_factory.
Common mistakes
Mutable default list in dataclass field; forgetting frozen for dict keys.
Best practices
Use field(default_factory=list); kw_only=True for clarity in large models.
Follow-up questions
Open one as its own read / solve / listen card