Python データクラスのインスタンスを辞書にする : asdict が __dict__ より強力な理由
Python の asdict はデータクラスのインスタンスを辞書にします。
from dataclasses import dataclass, asdict
@dataclass
class User:
id: int
name: str
a = User(id=2, name='Alice')
d = asdict(a)
print(d) # {'id': 2, 'name': 'Alice'}
下のコードを見ると asdict は __dict__ と変わらない印象をもちます。
from dataclasses import dataclass, asdict
@dataclass
class User:
id: int
name: str
a = User(id=2, name='Alice')
x = asdict(a)
y = a.__dict__
print(x) # {'id': 2, 'name': 'Alice'}
print(y) # {'id': 2, 'name': 'Alice'}
asdict は dataclass のインスタンスをもつ変数も辞書にする
from dataclasses import dataclass, asdict
@dataclass
class Person:
name: str
age: int
@dataclass
class User:
id: int
person: Person
a = User(id=2, person=Person(name='Alice', age=28))
x = asdict(a)
y = a.__dict__
print(x) # {'id': 2, 'person': {'name': 'Alice', 'age': 28}}
print(y) # {'id': 2, 'person': Person(name='Alice', age=28)}
__dict__ は person の値(データクラスのインスタンス)を辞書にしていません。どうせだったら Person(name='Alice', age=28) も辞書にしてくれたら…という願いをきくのが asdict です。
asdict : 入れ子も対応
__dict__ : 入れ子は非対応