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=Truefrozen=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 подскажет развёрнутый ответ в реальном времени.