Mediumdataclass

Что такое dataclass (Python 3.7)?

1Постановка

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

2Решение

@dataclass — декоратор, автоматически генерирующий __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)

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

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

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

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