Чем init() отличается от new()?
1️⃣ Как кратко ответить
__new__() отвечает за создание нового экземпляра класса и возвращает этот экземпляр. __init__() инициализирует уже созданный экземпляр, устанавливая его начальное состояние. __new__() вызывается перед __init__() и используется редко, в основном при наследовании от неизменяемых типов.
2️⃣ Подробное объяснение темы
В Python, когда создается новый объект класса, задействуются два специальных метода: __new__() и __init__(). Они выполняют разные задачи в процессе создания и инициализации объекта.
__new__() — Создание объекта
__new__() — это метод, который отвечает за создание нового экземпляра класса. Он вызывается перед __init__(). Этот метод принимает в качестве первого аргумента сам класс, а также любые дополнительные аргументы, которые были переданы при создании объекта. __new__() должен вернуть новый экземпляр класса.
Пример использования __new__():
class MyClass:
def __new__(cls, *args, **kwargs):
# Создание нового экземпляра класса
instance = super(MyClass, cls).__new__(cls)
print("Создание экземпляра")
return instance
def __init__(self, value):
# Инициализация экземпляра
self.value = value
print("Инициализация экземпляра")
# Создание объекта
obj = MyClass(10)
def __new__(cls, *args, **kwargs):— определение метода__new__(), который принимает классclsи дополнительные аргументы.instance = super(MyClass, cls).__new__(cls)— вызов__new__()родительского класса для создания нового экземпляра.return instance— возврат созданного экземпляра.
__init__() — Инициализация объекта
__init__() — это метод, который инициализирует уже созданный экземпляр класса. Он принимает в качестве первого аргумента сам экземпляр (обычно self) и любые дополнительные аргументы, которые были переданы при создании объекта. __init__() не возвращает значение.
Пример использования __init__():
class MyClass:
def __init__(self, value):
# Инициализация экземпляра
self.value = value
print("Инициализация экземпляра")
# Создание объекта
obj = MyClass(10)
def __init__(self, value):— определение метода__init__(), который принимает экземплярselfи аргументvalue.self.value = value— установка начального состояния экземпляра.
Зачем и где это применяется
__new__()используется редко, в основном при создании классов, наследующих от неизменяемых типов, таких какint,str,tuple. Это позволяет контролировать процесс создания экземпляра.__init__()используется для инициализации объектов, устанавливая их начальное состояние. Это стандартный метод, который используется в большинстве классов.
Как это работает
Когда вы создаете объект класса, Python сначала вызывает __new__(), чтобы создать новый экземпляр. Затем, если __new__() возвращает экземпляр класса, вызывается __init__(), чтобы инициализировать этот экземпляр. Это позволяет разделить процесс создания и инициализации объекта, что может быть полезно в сложных сценариях, таких как наследование и работа с неизменяемыми типами.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться