Python のデータクラスにデフォルト値を設定する:リストは default_factory と lambda を使う
2023.02.18
Python のデータクラスは変数にデフォルト値を設定できます。
from dataclasses import dataclass
@dataclass
class User:
id: int = 2
name: str = 'Alice'
a = User()
print(a) # User(id=2, name='Alice')
リストのデフォルト値
データクラスのメンバ変数にリストのデフォルト値をそのまま設定するとエラーになります。
@dataclass
class User:
id: int = 2
name: str = 'Alice'
scores: list = [23, 45]
# ValueError: mutable default <class 'list'> for field scores is not allowed: use default_factory
default_factory
と Python の lambda 式を使うとリストのデフォルト値を入れられます。
from dataclasses import dataclass, field
@dataclass
class User:
id: int = 2
name: str = 'Alice'
scores: list = field(default_factory=lambda: [67, 58])
a = User()
print(a) # User(id=2, name='Alice', scores=[67, 58])
ちなみに
field(default_factory=[67, 58])
は
TypeError: 'list' object is not callable
というエラーになります。