Найти тему
Python Каждый День

__new__ и __init__ в Python. ООП

Оглавление

В языке программирования Python, классы могут содержат два специальных магических метода, которые играют ключевую роль в создании экземпляров класса: __new__ и __init__. Давайте разберем, чем они отличаются друг от друга:

__new__:

  • Это статический метод, который отвечает за создание нового объекта (экземпляра) класса. Он вызывается еще до __init__ и передает созданный объект в __init__.
  • __new__ редко переопределяется, и в большинстве случаев его можно встретить в метаклассах или при работе с неизменяемыми (immutable) типами данных, такими как str, int, tuple и т.д.
  • Если вы решите переопределить __new__, у вас должна быть веская причина, поскольку это более сложно и менее часто требуется.
  • Синтаксис: def __new__(cls, *args, **kwargs)

Пример:

__init__:

  • Обычно называемый конструктором объекта, __init__ используется для инициализации экземпляра после его создания. Здесь мы устанавливаем начальные состояния объекта, аргументы.
  • __init__ более распространен и часто переопределяется для определения начального состояния объекта, например, чтобы инициализировать атрибуты.
  • __init__ не возвращает ничего (None). Он только инициализирует объект.
  • Синтаксис: def __init__(self, *args, **kwargs)
-2

В заключение, __new__ и __init__ выполняют две разные функции в жизненном цикле экземпляра класса: __new__ создает и возвращает сам объект, а __init__ настраивает объект, когда он уже создан. Объединение этих двух методов позволяет нам гибко управлять процессом создания