Introduction
Advanced dataclass features including field options, validators, and conversions.
Field Options
from dataclasses import dataclass, field
from typing import List
@dataclass
class InventoryItem:
name: str
price: float
quantity: int = 0
tags: List[str] = field(default_factory=list)
last_updated: datetime = field(default_factory=datetime.now)
# Custom default factory
def default_products():
return {"default": "value"}
@dataclass
class Store:
items: dict = field(default_factory=default_products)
Post-Init Validation
from dataclasses import dataclass, field
@dataclass
class Rectangle:
width: float
height: float
_area: float = field(init=False, repr=False)
def __post_init__(self):
if self.width <= 0 or self.height <= 0:
raise ValueError("Dimensions must be positive")
self._area = self.width * self.height
@property
def area(self):
return self._area
Slots with Dataclasses
@dataclass(slots=True)
class Point:
x: float
y: float
Practice Problems
- Add custom field validation
- Use slots for memory efficiency
- Create computed fields with post_init
- Use default_factory for mutable defaults
- Implement from_dict classmethod