tgoop.com/pythonofff/2856
Create:
Last Update:
Last Update:
🔍 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
BY Python академия
Share with your friend now:
tgoop.com/pythonofff/2856