2024年1月22日月曜日

Pydantic の TypeAdapter を使ってみる

Pydantic の TypeAdapter を使ってみる

概要

使ってみました
簡単に言うと独自のクラスを扱うコレクションクラスを新しいクラスとして定義することができる機能です

環境

  • macOS 11.7.10
  • Python 3.11.6
  • pydantic 2.5.3

サンプルコード

from typing import List

from pydantic import BaseModel, TypeAdapter


class User(BaseModel):
    name: str
    age : int


UserList = TypeAdapter(List[User])


if __name__ == "__main__":
    # 単一データの場合 (TypeAdapterなし)
    data = {
        "name": "hawk",
        "age": 10
    }
    user = User(**data)
    print(user.name)
    # 複数データの場合 (TypeAdapter あり)
    data_list = [
        {
            "name": "snowlog",
            "age": 20,
        },
        {
            "name": "hawksnowlog",
            "age": 30,
        }
    ]
    user_list = UserList.validate_python(data_list)
    for user in user_list:
        print(user.name)
    # 複数データの場合 (TypeAdapter なし)
    user_list: list[User]
    for data in data_list:
        user = User(**data)
        user_list.append(user)
    for user in user_list:
        print(user.name)

解説

サンプルコードを見るのが一番理解できるかなと思います
TypeAdapter を使った場合はシリアライズが 1 行で完了しますが使っていない場合はシリアライズをわざわざループで回して行う必要があるので記述が面倒になります

これが TypeAdapter の一番の機能かなと思います

最後に

データベースのモデルなども使うことができるのか気になりました
CustomTypesという機能もありこれと組み合わせると更に便利に使うことができそうです

参考サイト

0 件のコメント:

コメントを投稿