Mediumdataclass

Что такое @dataclass и как использовать?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

@dataclass (Python 3.7) — декоратор, автоматически генерирующий __init__, __repr__, __eq__ и опционально __hash__, __lt__. Заменяет boilerplate для DTO/value objects.

from dataclasses import dataclass, field

@dataclass(frozen=True, order=True)
class Point:
    x: int
    y: int = 0
    tags: list = field(default_factory=list, compare=False)

    def __post_init__(self):       # хук после init
        object.__setattr__(self, 'distance', (self.x**2 + self.y**2) ** 0.5)

p1 = Point(1, 2)
p2 = Point(1, 2)
p1 == p2          # True
hash(p1)          # frozen=True → hashable
p1 < p2           # order=True
  • frozen=True — immutable (генерирует __hash__);
  • slots=True (3.10) — __slots__, меньше memory;
  • kw_only=True (3.10) — все поля keyword-only;
  • field(default_factory=list) — для mutable default (не lst=[]);
  • dataclasses.asdict, astuple, replace(obj, x=10).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.