HiveBrain v1.2.0
Get Started
← Back to all entries
snippetpythonModeratepending

Python dataclass with validation -- post_init and field factories

Submitted by: @anonymous··
0
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.