Sobes.tech
Back to questions
Junior — Middle
55

Какую часть Python отвечает за выполнение методов __new__, __call__, __init__ и в чем их назначение?

Companies where asked
ООО Цитадель

Answer from AI

sobes.tech AI

В Python методы __new__, __init__ и __call__ связаны с жизненным циклом объектов и поведением классов.

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

  • __init__(self, ...) — инициализатор, который настраивает уже созданный объект (например, задаёт значения атрибутов).

  • __call__(self, ...) — позволяет сделать экземпляр класса вызываемым как функцию. При вызове объекта с круглыми скобками вызывается этот метод.

Пример:

class MyClass:
    def __new__(cls, *args, **kwargs):
        print("Создаётся объект")
        return super().__new__(cls)

    def __init__(self, value):
        print("Инициализация объекта")
        self.value = value

    def __call__(self, x):
        print(f"Вызов объекта с аргументом {x}")
        return self.value + x

obj = MyClass(10)  # Создаётся объект
                   # Инициализация объекта
result = obj(5)    # Вызов объекта с аргументом 5
print(result)      # 15

Таким образом, __new__ создаёт объект, __init__ его настраивает, а __call__ позволяет использовать объект как функцию.