PYTHONOFFF Telegram 2856
🔍 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



tgoop.com/pythonofff/2856
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

ZDNET RECOMMENDS As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance. The main design elements of your Telegram channel include a name, bio (brief description), and avatar. Your bio should be: Deputy District Judge Peter Hui sentenced computer technician Ng Man-ho on Thursday, a month after the 27-year-old, who ran a Telegram group called SUCK Channel, was found guilty of seven charges of conspiring to incite others to commit illegal acts during the 2019 extradition bill protests and subsequent months.
from us


Telegram Python академия
FROM American