Mediumnewinit
Что такое магические методы __new__ и __init__?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`__new__(cls, ...)` — статический метод, создаёт экземпляр (выделяет память), возвращает instance. Вызывается до __init__. `__init__(self, ...)` — инициализирует экземпляр после создания, не возвращает ничего.
# Singleton через __new__
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
a = Singleton()
b = Singleton()
a is b # True
# Полный цикл: Point(1, 2) → __new__ → __init__
class Point:
def __new__(cls, x, y):
print('new')
return super().__new__(cls)
def __init__(self, x, y):
print('init')
self.x, self.y = x, y__new__переопределяют для: singleton, immutable types (str, int, tuple —__init__не вызывается), метаклассов;- Часто
__init__достаточно,__new__для специальных случаев.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.