Pydantic で Generic を扱う
| from typing import Generic, TypeVar
from pydantic import BaseModel
from pydantic.generics import GenericModel
InnerT = TypeVar('InnerT')
class Outer(GenericModel, Generic[InnerT]):
data: InnerT | None
class InnerX(BaseModel):
x: int = 1
class InnerY(BaseModel):
Y: str = "foo"
class InnerZ(BaseModel):
z: bool = True
ModelX = Outer[InnerX]
#{'data': {'x': 1} }
ModelY = Outer[InnerY]
#{'data': {'y': "foo"} }
ModelZ = Outer[InnerZ]
#{'data': {'z': true} }
|
モデルの動的生成
Generic と関係ないがモデルの動的生成ができる。
| from pydantic import BaseModel, create_model
class FooModel(BaseModel):
foo: str
bar: int = 123
BarModel = create_model(
'BarModel',
apple='russet',
banana='yellow',
__base__=FooModel,
)
print(BarModel)
#> <class 'pydantic.main.BarModel'>
print(BarModel.__fields__.keys())
#> dict_keys(['foo', 'bar', 'apple', 'banana'])
|
参考