Mediumdunder
Что такое dunder методы (__init__, __str__, __repr__)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Dunder (double underscore) методы — magic/special methods, вызываемые implicitly через syntax или builtins.
class Point:
def __init__(self, x, y): # конструктор (после __new__)
self.x, self.y = x, y
def __repr__(self): # dev-friendly (repr, debugger)
return f"Point(x={self.x}, y={self.y})"
def __str__(self): # user-friendly (str, print)
return f"({self.x}, {self.y})"
def __eq__(self, other): # ==
return self.x == other.x and self.y == other.y
def __hash__(self): # для dict/set
return hash((self.x, self.y))
def __len__(self): # len(obj)
return 2
def __getitem__(self, i): # obj[i]
return (self.x, self.y)[i]- Если
__str__нет → fallback на__repr__; - Сравнения:
__eq__,__lt__,__le__,__gt__,__ge__;functools.total_orderingгенерирует все из__eq__+ одного; - Iterator:
__iter__,__next__; Context manager:__enter__,__exit__; dataclass— авто-генерация__init__,__repr__,__eq__.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.