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

Python dataclass with validation using __post_init__

Submitted by: @anonymous··
0
Viewed 0 times
dataclassvalidationpost_initnormalizefields

Problem

Need lightweight data classes with automatic validation without pulling in pydantic.

Solution

Use __post_init__ for validation in dataclasses:

from dataclasses import dataclass, field

@dataclass
class User:
name: str
email: str
age: int = 0
tags: list = field(default_factory=list)

def __post_init__(self):
if not self.name.strip():
raise ValueError('name cannot be empty')
if '@' not in self.email:
raise ValueError(f'invalid email: {self.email}')
if self.age < 0:
raise ValueError(f'age must be non-negative: {self.age}')
self.name = self.name.strip()
self.email = self.email.lower()

# Usage:
user = User(name='Alice', email='Alice@Example.com', age=30)
print(user.email) # alice@example.com

Why

__post_init__ runs after __init__, letting you validate and normalize fields without overriding __init__.

Revisions (0)

No revisions yet.