Pydantic: 基本的な使用方法
はじめに
Pydanticは私が一番好きなPythonのパッケージです。 イメージとしては、builtinの dataclasses に実行時バリデーションを追加したものです。
「型は飾り」のPythonにおいて、実行時においても型に守られるのはとても嬉しいです。 データの型変換とバリデーションが同時に行われる他、デフォルト値の補完もpydanticに任せることができます。 そのため外界とのインターフェイスにpydanticを置くことで、安心してデータを扱うことができます。
現在は FastAPI や Strawberry などと統合され、人気パッケージとなっています。
サンプルコードは conao3-playground/python-pydantic-blog にあります。
基本的な使用方法
モデルの定義
まずは基本的なモデルの定義から見ていきます。
pydantic.BaseModel
を継承してモデルを定義します。
初期値を与えることで、デフォルト値を設定することができます。 初期値がないフィールドは必須フィールドとなります。
pydantic.BaseModel
を継承することで、キーワードでの初期化が可能になり、print関数の出力も見やすいフォーマッタが用意されます。
pydanticオブジェクトの生成
pydantic.BaseModel
を継承したモデルのインスタンスを便宜上「pydanticオブジェクト」と呼ぶことにします。
pydanticオブジェクトは複数の方法で生成することができます。
キーワード引数での初期化
基本の使い方で見た通り、キーワード引数で初期化することができます。
dictからの初期化
dictを持っている場合、そのdictからpydanticオブジェクトを生成することができます。
また、dictは **
演算子でキーワード引数に展開できるため、以下のようにも書くことができます。
parse_obj(obj: Any)
は引数を dict(args: Iterable)
で変換してから **
演算子で展開しています。
そのため、実際にはdict以外のオブジェクトを渡すこともできます。
JSONからの初期化
JSON文字列を持っている場合、そのJSON文字列からpydanticオブジェクトを生成することができます。
pydanticオブジェクトから取り出し
フィールド名での取り出し
pydanticオブジェクトからフィールド名で取り出すことができます。
dictへの変換
pydanticオブジェクトは dict()
関数でdictに変換することができます。
jsonへの変換
pydanticオブジェクトは json()
関数でjsonに変換することができます。
まとめ
この記事はほとんど dataclasses
と同じことをしているだけになってしまいましたが、
次回はバリデーションの話をします。