TGViewer
Python академия Python академия @pythonofff · 7.13K subscribers
Post #2856 877
🔍 match-case + dataclass: Python как mini-Pydantic


Когда не хочется тащить Pydantic, но нужно элегантно валидировать и распарсить входящие данные — попробуй комбо match-case и dataclass. Красиво, просто, pythonic.


Python 3.10+ принёс структурное сопоставление (match-case). В связке с dataclass можно описывать и валидировать структуру данных без лишней магии.

Пример: простенький парсер события из словаря:


from dataclasses import dataclass
from typing import Any

@dataclass
class UserJoined:
user_id: int
room: str

@dataclass
class MessageSent:
user_id: int
message: str

def parse_event(event: dict[str, Any]) -> Any:
match event:
case {"type": "user_joined", "user_id": int(uid), "room": str(room)}:
return UserJoined(uid, room)
case {"type": "message_sent", "user_id": int(uid), "message": str(msg)}:
return MessageSent(uid, msg)
case _:
raise ValueError("Unknown event type")

# Пример использования
raw = {"type": "message_sent", "user_id": 42, "message": "Привет!"}
event = parse_event(raw)
print(event) # MessageSent(user_id=42, message='Привет!')


💡 Что происходит:
- match проверяет структуру словаря и типы значений.
- Если шаблон совпал, мы сразу вытаскиваем нужные поля.
- dataclass делает остальное: хранение данных и авто-_repr_.

Плюсы:
- Не надо писать вручную if, try/except, dict.get().
- Простая и читабельная валидация без внешних зависимостей.
- Работает из коробки, если у вас Python 3.10+.

Минусы:
- Без вложенных структур и сложных схем — не замена Pydantic, но хороший lightweight-вариант.

Подписывайтесь на канал 👉@pythonofff
  • ❤ 1
  • 👍 1
More from @pythonofff
  1. Sep 30, 2026Функции высшего порядка Функции высшего порядка - функции принимающие или возвращающие дру…
  2. Sep 27, 2026Конструктор класса У классов практически во всех языках есть конструкторы — это такие спец…
  3. Sep 24, 2026Анонимные функции Часто функции нужны только один раз, причем короткие. И избыточно создав…
  4. Sep 23, 2026Бесконечные списки Мы уже рассказывали про важность копирования списков. Но именно из-за т…
  5. Sep 21, 2026Заглушки Для создания пустых функций и классов есть сразу два способа соответствующих прав…
  6. Sep 20, 2026Параметры функции *args, **kwargs Думаю, многие хоть раз видели такую запись, сейчас мы уз…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →