Open1
Pydantic v2で値オブジェクトを実現する方法
from pydantic import BaseModel, Field, RootModel
class UserId(RootModel):
root: int = Field(..., ge=1)
class UserName(RootModel):
root: str = Field(..., min_length=1, max_length=10)
class User(BaseModel):
id: UserId
name: UserName
id_x = UserId.parse_obj(1)
id_y = UserId.parse_obj(1)
id_z = UserId.parse_obj(2)
print(id_x == id_y) # True
print(id_x == id_z) # False
なおv1ではBaseModel
に__root__
プロパティを宣言することで実現できた。