Чем __new__ отличается от __init__?

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

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

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

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

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

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

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

Обычно достаточно определить init. new нужен, например, при создании подкласса неизменяемого типа: значение str или int задаётся до инициализации. Если new возвращает объект, не являющийся экземпляром cls, обычный вызов этого cls не запускает его init для результата. В new часто вызывают super().__new__(cls). Не путайте эти методы с конструктором класса на уровне метакласса: вызов класса координируется type.call. Побочные эффекты в обоих методах следует делать осознанно.

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

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

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

Подробнее