ヒトリ歩き

愚痴とかいろいろ書きます

pydanticのデータクラスからインスタンスを生成する方法

最近、pydanticを使う機会がありましたので、小ネタを少々記事にします。

pydanticのデータクラスからインスタンスを生成する方法は2パターンある。

2つの違いは、辞書データをパラメータに指定する場合、アンパックが必要かどうかの違い。 例えば、以下のようなデータクラスがあるとする。

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

init_dataを使用してインスタンスを生成する。

init_data = {
    'id': 201,
    'name': "hoge"
}

user1 = User(**init_data)
# user1 = User(init_data) # unpackしてないとエラーになる
user2 = User.model_validate(init_data)
# user2 = User.model_validate(**init_data) # unpackするとエラーになる

ORMを使ったデータクラスからインスタンスを生成する場合、model_validateクラスメソッドを使用することで、インスタンスが生成できる。
辞書型データであることが分かっているのであれば、コンストラクタからインスタンスを生成する方がコードの可読性はよいと思う。