Можно ли в __new__ отменить создание экземпляра класса
Python
Senior
Без компании
Можно ли в __new__ отменить создание экземпляра класса
Ответы
Да, можно. В методе `__new__` можно вернуть `None` или другой объект вместо нового экземпляра, тем самым отменив его создание. Однако, если вернуть `None`, Python вызовет `TypeError`. Лучше вернуть экземпляр другого класса или тот же класс с модификациями.
Пример:
```
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance # всегда возвращаем один и тот же экземпляр
```
Или пример с отменой создания:
```
class NoInstance:
def __new__(cls, *args, **kwargs):
if some_condition:
return super().__new__(cls)
return object.__new__(cls) # или другой объект
```
Важно: `__init__` не вызывается, если `__new__` не возвращает экземпляр этого класса.