python/응용

Pydantic 으로 dataclass 대체하기

wefree 2023. 7. 29. 22:13

https://wefree.tistory.com/280 의 dataclass 기능을 pydantic 2.x 로 대체해 보자

 

import random
import string
from typing import Any

from pydantic import BaseModel, Field, ConfigDict


def generate_id() -> str:
    return ''.join(random.choices(string.ascii_lowercase, k=12))


class Person(BaseModel):
    name: str
    phone_numbers: list[str] = []
    id: str = Field(default_factory=generate_id)

    @property
    def phone_numbers_len(self) -> int:
        return len(self.phone_numbers)

    model_config = ConfigDict(frozen=True)

    def model_post_init(self, __context: Any) -> None:
        pass