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