from pydantic import BaseModel, Field
classUser(BaseModel):id:int name:str email:str|None=None age:int= Field(ge=0, le=150)u = User(id=1, name="kim", age=20)# u.id ** 1, u.model_dump() ** {"id":1, "name":"kim", "email":None, "age":20}User(id="1", name="kim", age=20)# 문자열 "1" → int 1 자동 변환 (coercion)User(id=1, name="kim", age=-1)# ValidationError — age >= 0 위반
from pydantic import BaseModel, field_validator, model_validator
classTrip(BaseModel): start:int end:int@field_validator("end")@classmethoddefend_after_start(cls, v, info):if v <= info.data["start"]:raise ValueError("end must be > start")return v
@model_validator(mode="after")defcheck_consistency(self):# 객체 전체 검증return self