概要
同じような記述のタイプヒントを複数のモデルで使い回す場合には CustomType で独自の型を定義して使いますと便利です
環境
- macOS 11.7.10
- Python 3.11.6
- pydantic 2.5.3
サンプルコード
from typing import Annotated
from pydantic import BaseModel, Field, TypeAdapter
Name = Annotated[str, Field(min_length=5)]
class Animal(BaseModel):
name: Name
class User(BaseModel):
name: Name
age : int
AdaptedName = TypeAdapter(Name)
if __name__ == "__main__":
user_data = {
"name": "hawksnowlog",
"age": 10
}
user = User(**user_data)
print(user.name)
animal_data = {
"name": "snowlog",
# "name": "hawk", # error
}
animal = Animal(**animal_data)
print(animal.name)
# TypeAdapter を使えばクラスにしないでもカスタムタイプを検証できる
name= AdaptedName.validate_python("hawksnowlog")
# name = AdaptedName.validate_python("hawk") # error
print(name)
最後に
継承してもいいですがわざわざ継承するほどでもない共通のフィールドを扱いたい場合には便利かなと思います
型を一箇所で管理できれば一箇所修正するだけで複数のモデルに適用することができます
0 件のコメント:
コメントを投稿