最近、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クラスメソッドを使用することで、インスタンスが生成できる。
辞書型データであることが分かっているのであれば、コンストラクタからインスタンスを生成する方がコードの可読性はよいと思う。