В языке программирования 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)