Python 3.7+dataclassesфункция
dataclasses.field()
field
Функция field() задаёт дополнительные параметры поля: значение по умолчанию, фабрику, участие в repr/compare/init.
Синтаксис
dataclasses.field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, compare=True, init=True)
Главная причина существования field() — изменяемые значения по умолчанию: одно и то же значение из тела класса разделили бы все экземпляры, поэтому dataclass падает с ValueError на нехешируемом default и требует default_factory. Ловушка в том, что проверка ловит именно нехешируемое: собственный изменяемый класс с обычным __hash__ проскочит через default= и молча станет общим для всех объектов. Флаги compare=False и repr=False удобны для служебных полей вроде кеша или id, которые не должны влиять на сравнение и вывод.
Примеры
from dataclasses import dataclass, field
@dataclass
class Bag:
items: list = field(default_factory=list)
_id: int = field(default=0, repr=False, compare=False)
b = Bag()
b.items.append(1)
repr(b) # → 'Bag(items=[1])'
Bag() == Bag() # → True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности