Sobes.tech
Назад к вопросам
Junior — Middle
44

В каком порядке происходит вызов методов __new__ и __init__ при создании объекта класса в Python?

Ответ от нейросети

sobes.tech AI

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

Определение:
__new__ — это статический метод, который создает и возвращает новый экземпляр класса. __init__ — это метод инициализации, который вызывается после создания объекта и настраивает его атрибуты.

Пример использования:

class MyClass:
    def __new__(cls, *args, **kwargs):
        print("Вызов __new__")
        instance = super().__new__(cls)
        return instance

    def __init__(self, value):
        print("Вызов __init__")
        self.value = value

obj = MyClass(10)

Пояснение кода:

  1. При создании объекта MyClass(10) сначала вызывается __new__, который создает пустой объект класса.
  2. __new__ возвращает этот объект.
  3. После этого вызывается __init__, который инициализирует объект, присваивая значение атрибуту value.
  4. В итоге объект готов к использованию с заданными параметрами.

Ключевые моменты:

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