Reduce Duplication

이전의 내용에서 유저에 관한 모델을 생각해보자.

이를 단순히 작성하면 아래와 같을 것이다.

class UserIn(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None

class UserOut(BaseModel):
    username: str
    email: EmailStr
    full_name: Optional[str] = None

class UserInDB(BaseModel):
    username: str
    hashed_password: str
    email: EmailStr
    full_name: Optional[str] = None

딱 봐도 중복된 내용이 너무나도 많다.

상속을 이용하여 깔끔하게 정리하면 아래와 같다.

class UserBase(BaseModel):
    username: str
    email: EmailStr
    full_name: Optional[str] = None

class UserIn(UserBase):
    password: str

class UserOut(UserBase):
    pass

class UserInDB(UserBase):
    hashed_password: str

**UserBase라는 추상 pydantic 모델을 만들어 놓고 각각의 클래스에 상속하여 사용하는 것을 볼 수 있다.**

Unwrapping pydantic model

pydantic 모델 객체를 파이썬 딕셔너리로 바꿀 수 있다.

만약

user_in = UserIn(username="john", password="secret", email="[email protected]")

와 같이 정의가 되어 있다면,

user_dict = user_in.dict()

와 같이 딕셔너리로 바꿀 수 있다.