Что делает метод new
Основное различие между этими двумя методами состоит в том, что __new__
обрабатывает создание объекта, а __init__
обрабатывает его инициализацию.
__new__
вызывается автоматически при вызове имени класса (при создании экземпляра), тогда как __init__
вызывается каждый раз, когда экземпляр класса возвращается __new__
, передавая возвращаемый экземпляр в __init__
в качестве параметра self
, поэтому даже если вы сохранили экземпляр где-нибудь глобально/статически и возвращали его каждый раз из __new__
, для него все-равно будет каждый раз вызываться __init__
.
Из вышесказанного вытекает что сначала вызывается __new__
, а потом __init__
Oct. 9, 2023, Источник
Метод `__new__()` является статическим, и используется для создания нового экземпляра класса. Он вызывается перед методом `__init__()` при создании нового объекта.
В отличие от метода `__init__()`, который инициализирует уже созданный объект, данный метод создает новый объект. Обычно вы переопределяете этот метод только в специальных случаях, когда вам нужно настроить способ создания объекта или выполнить какую-то предварительную обработку до его инициализации.
Основное использование метода включает в себя:
1. Переопределение метода `__new__()` для настройки поведения создания объекта, например, для создания объекта определенного подкласса в зависимости от некоторого условия.
2. Вызов данного метода в метаклассах для создания нового экземпляра класса при определении класса.
Пример:
class MyClass:
def __new__(cls, *args, **kwargs):
# Создание нового экземпляра класса
instance = super().__new__(cls)
# Некоторая предварительная обработка перед инициализацией
print("Создан новый объект")
return instance
def __init__(self, x):
self.x = x
obj = MyClass(10)
В этом примере метод `__new__()` создает новый объект класса `MyClass`, а затем вызывается метод `__init__()` для его инициализации.
Feb. 18, 2024, easyoffer