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