snippetpythonModeratepending
Python dataclass with validation -- post_init and field factories
Viewed 0 times
dataclasspost_initfieldfrozendefault_factoryslots
python
Problem
Need structured data objects with default values, validation, and immutability. Regular classes require too much boilerplate. Plain dicts have no structure.
Solution
Use dataclasses with __post_init__ for validation, field(default_factory=...) for mutable defaults, and frozen=True for immutability.
Code Snippets
Validated frozen dataclass
from dataclasses import dataclass, field
from datetime import datetime
@dataclass(frozen=True, slots=True)
class User:
name: str
email: str
roles: list[str] = field(default_factory=list)
created_at: datetime = field(default_factory=datetime.utcnow)
def __post_init__(self):
if '@' not in self.email:
raise ValueError(f'Invalid email: {self.email}')
if not self.name.strip():
raise ValueError('Name cannot be empty')
# Usage
user = User(name='Alice', email='alice@example.com', roles=['admin'])
# user.name = 'Bob' # FrozenInstanceError (immutable)
# Convert to dict
from dataclasses import asdict
user_dict = asdict(user)Revisions (0)
No revisions yet.