__new____new__ — это статический метод, отвечающий за создание нового экземпляра класса. Он вызывается до __init__, который отвечает только за инициализацию уже созданного экземпляра.
__new__ вызывается первым, получая сам класс (cls) в качестве первого аргумента__init__ на этом возвращённом экземпляре для его инициализации__new__(cls) → создаёт экземпляр → __init__(self) → инициализирует экземпляр
__new__1. Неизменяемые типы — так как __init__ не может изменить неизменяемый объект после создания, нужно использовать __new__:
class PositiveInt(int):
def __new__(cls, value):
if value <= 0:
raise ValueError("Must be positive")
return super().__new__(cls, value)
2. Паттерн Singleton — обеспечение наличия только одного экземпляра класса:
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
__new__ должен вернуть экземпляр, иначе __init__ не будет вызван__init__ того класса__new__ переопределяется редко — для изменяемых объектов достаточно __init__int, str или tupleМетод __new__ вызывается после __init__ и отвечает за инициализацию атрибутов экземпляра.
Новый — ещё не проверен сообществом
Вы