環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

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

というエラーになります。