Встречается на собеседованиях • сегодня

Можно ли в __new__ отменить создание экземпляра класса

Да, можно. В методе __new__ можно вернуть None или другой объект вместо нового экземпляра, тем самым отменив его создание. Однако, если вернуть None, Python вызовет TypeError. Лучше вернуть экземпляр другого класса или тот же класс с модификациями.

Пример:

python
class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance  # всегда возвращаем один и тот же экземпляр

Или пример с отменой создания:

python
class NoInstance:
    def __new__(cls, *args, **kwargs):
        if some_condition:
            return super().__new__(cls)
        return object.__new__(cls)  # или другой объект

Важно: __init__ не вызывается, если __new__ не возвращает экземпляр этого класса.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы