2024年1月23日火曜日

Pydantic の CustomTypes を使ってみる

Pydantic の CustomTypes を使ってみる

概要

同じような記述のタイプヒントを複数のモデルで使い回す場合には 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 件のコメント:

コメントを投稿