Python データクラスのインスタンスを辞書にする : asdict が __dict__ より強力な理由
2023.02.18
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__
: 入れ子は非対応