0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pydanticの`from_attributes`とは?

Posted at

概要

Pydanticのオブジェクトは、キーワード引数を使ってクラスから作成できます。
また、クラスのmodel_validate()を使うと、辞書やオブジェクトから作成できます。

このとき、クラスのmodel_configfrom_attributes=Trueがあるかないかで、変換元に使えるオブジェクトが変わります。

説明

2種類のクラスを考えましょう。

クラス 特徴
User from_attributes=False(デフォルト)
UserFA from_attributes=True

これらのクラスは、次のようにオブジェクトを作成できます。

構築方法 \ 引数 自クラスのオブジェクト 他クラスのオブジェクト 辞書 キーワード引数
User() / UserFA() x x x
User.model_validate() x ×
UserFA.model_validate() ×

サンプルコード

具体的にコードで確認してみましょう。

from pydantic import BaseModel, ConfigDict

class BaseModelFA(BaseModel):
    model_config = ConfigDict(from_attributes=True)

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

class UserFA(BaseModelFA):
    name: str
    age: int

user = User(name="Alice", age=30)
user_fa = UserFA(name="Alice", age=30)
user_fa_dict = user_fa.model_dump()  # {'name': 'Alice', 'age': 30}

print(User.model_validate(user_fa_dict))  # OK
# print(User.model_validate(user_fa))  # NG
print(UserFA.model_validate(user))  # OK

このように、UserFA.model_validate()は、他クラスのオブジェクトから作成できます。
一方、User.model_validate()は、他クラスのオブジェクトを渡すとValidationErrorになります。

補足

  • 変換元に余計な情報があっても無視されます
  • 変換先にデフォルト値があれば、変換元になくてもOKです

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?