Какой метод нужно переопределить, чтобы изменить стандартное поведение при создании экземпляра класса, например реализовать singleton?

Для управления созданием экземпляра переопределяют __new__; __init__ инициализирует уже созданный объект. Однако singleton через __new__ требует учёта повторной инициализации и конкурентных вызовов.

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

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

Для управления созданием экземпляра переопределяют new; init инициализирует уже созданный объект. Однако singleton через new требует учёта повторной инициализации и конкурентных вызовов.

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

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

Для управления созданием экземпляра переопределяют new; init инициализирует уже созданный объект. Однако singleton через new требует учёта повторной инициализации и конкурентных вызовов.

__new__ должен вернуть экземпляр; если это объект подходящего класса, затем обычно вызывается init. Возврат ранее созданного singleton не отменяет этот повторный вызов автоматически. Кроме потоков, нужно определить поведение наследования, сериализации и разных процессов. Во многих приложениях проще явно передавать единственный экземпляр через зависимости, чем скрывать глобальное состояние в конструкторе.

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

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

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

Подробнее