Python

Валидация данных через dataclass

Algonexys · 07.08.2026 · 👁 0

Типизированные структуры с проверкой в __post_init__ и сериализацией в словарь.

Код

from dataclasses import asdict, dataclass, field
from datetime import date


@dataclass(slots=True)
class User:
    username: str
    email: str
    age: int = 0
    tags: list[str] = field(default_factory=list)
    registered: date = field(default_factory=date.today)

    def __post_init__(self):
        if "@" not in self.email:
            raise ValueError(f"Некорректный email: {self.email}")
        if not 0 <= self.age < 130:
            raise ValueError(f"Некорректный возраст: {self.age}")
        self.username = self.username.strip().lower()

    def to_dict(self):
        data = asdict(self)
        data["registered"] = self.registered.isoformat()
        return data


user = User(" Ivan ", "ivan@example.com", 30, ["python", "django"])
print(user.to_dict())