snippetpythonTippending
Python dataclass with validation using __post_init__
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
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.