PythonでPydanticを用いてモデル内に別のPydanticモデルを含めてみます。
これは1つのPydanticモデル内に別のPydanticモデルを含めることで、「Pydanticモデルのネスト」と言います。
なお、PydanticはPythonの標準ライブラリではないので、事前にインストールする必要があります。また、今回はtypingモジュールも用います。こちらは標準ライブラリですので、事前にインストールする必要はありません。
■Python

Google Colaboratory(Google Colab),2023年3月18日時点ではPython 3.9.16が用いられる。
■Pydanticを用いてモデル内に別のPydanticモデルを含める
では、早速Pydanticを用いてPydanticを用いてモデル内に別のPydanticモデルを含めるコードを書いていきます。
■コード
from pydantic import BaseModel
from typing import List
class Item(BaseModel):
name: str
price: float
class User(BaseModel):
name: str
email: str
age: int
items: List[Item] = []
user_data = {
"name": "TAROUTESE TANAKA",
"email": "xxxtanaka01@example.com",
"age": 25,
"items": [
{"name": "りんご", "price": 198.0},
{"name": "バナナ", "price": 198.0},
],
}
user = User(**user_data)
print(user)まずは「from import」でpydanticモジュールのBaseModelを呼び出します。その後、Itemというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。括弧内には引数,パラメータとしてBaseModelを渡します。これでBaseModelを継承した形になる。(なお、これはPydanticのモデルを定義することでもあります。)そしてクラス内には「name、price」の2つの属性を記述します。各属性には、文字列(str)型なのか、浮動小数点数(float)型なのかを指定します。
次に、Userというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。(なお、これはPydanticのモデルを定義することでもあります。)括弧内には引数,パラメータとしてBaseModelを渡します。そしてモデル内には「name、email、age、items」の4つの属性を記述します。各属性には、文字列(str)型なのか、整数(int)型なのかを指定します。またitemsの場合は、「List[Item] = []」と記述し、オブジェクトが作成されたときに、最初に保持されるitemsリストは空の状態”[]”に設定します。
設定後、「user_data」という辞書型のデータを定義します。定義する際は、波括弧”{ }”を用い各要素を囲みコロン”:”を使ってキーと値のセットを記述します。itemsの場合は角括弧”[ ]”を使用しさらに、波括弧”{ }”で要素を記述します。
記述後、userという変数を定義し、User()を格納します。これでインスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。括弧内には引数,パラメータとして、”**”演算子を使用しuser_dataのキーを引数,パラメータ名に、その値を引数,パラメータの実際の値にマッピングします。これでデータのバリデーションや設定が行われます。
最後に、バリデーション(データが要件を満たしているかどうかをチェック)された状態のデータをprint()で出力してみます。
■実行・検証
このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、バリデーション(データが要件を満たしているかどうかをチェック)された状態のデータを出力させることができました。

コメント