Python Glossary English

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Сообщить о неточности