За что отвечают `__new__` и `__init__` в Python и какой метод вызывается первым при создании экземпляра?

Сначала вызывается __new__, создающий экземпляр, затем обычно __init__, инициализирующий его. __init__ не создаёт объект и должен возвращать None.

Короткий ответ

Что ответить на собеседовании

Сначала вызывается new, создающий экземпляр, затем обычно init, инициализирующий его. init не создаёт объект и должен возвращать None.

Подробный разбор

Ответ с пояснениями

Сначала вызывается new, создающий экземпляр, затем обычно init, инициализирующий его. init не создаёт объект и должен возвращать None.

Метод __new__(cls, ...) возвращает объект. Если результат является экземпляром cls, механизм создания вызывает его инициализацию с исходными аргументами; если возвращён объект другого типа, обычный вызов __init__ этого класса пропускается. Переопределение __new__ нужно, например, при создании подклассов неизменяемых типов. Для обычного прикладного класса достаточно __init__; путать его с методом, возвращающим новый объект, не следует.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее