Junior
40
questionbank

Что такое декоратор @dataclass в Python?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

@dataclass — это декоратор из модуля dataclasses, который автоматически генерирует специальные методы, такие как __init__, __repr__, __eq__ и другие, для классов, предназначенных для хранения данных. Это значительно упрощает создание классов-контейнеров для данных.

Пример:

python

Основные преимущества:

  • Сокращение boilerplate-кода: Автоматическое создание стандартных методов
  • Читаемость: Четко видно, что класс предназначен для хранения данных
  • Типизация: Поддерживает аннотации типов
  • Настраиваемость: Позволяет включать/отключать генерацию определенных методов (init=False, repr=False и т.д.)

Недостатки (в сравнении с namedtuple):

  • Классы, созданные с @dataclass, мутабельны по умолчанию, если поля не объявлены как field(frozen=True).
  • Потребляют немного больше памяти, чем namedtuple.

Параметры декоратора @dataclass(...):

ПараметрОписаниеПо умолчанию
initГенерировать ли метод __init__().True
reprГенерировать ли метод __repr__().True
eqГенерировать ли метод __eq__().True
orderГенерировать ли методы сравнения (__lt__, __le__, __gt__, __ge__).False
unsafe_hashФорсировать ли генерацию __hash__(). Используется с осторожностью.False
frozenСделать ли экземпляр неизменяемым (попытки присвоения вызовут исключение).False

Поля также могут быть определены с использованием функции field() из того же модуля для задания дополнительных параметров, например, значений по умолчанию, метаданных или для исключения поля из автоматически генерируемых методов.

python

@dataclass — это современный и предпочтительный способ создания простых классов для хранения данных в Python 3.7+.