Подтвердить что ты не робот

Какой метод вызывает `__init __()` в классах Python

Мне было интересно, как вызываются методы __init__(). Вызывает ли его __new__(), или __call__() вызывает его после создания экземпляра с помощью __new__() или каким-либо другим способом?

4b9b3361

Ответ 1

Python определяет, будет ли __ new __() вызывать __init __():

Если __new __() возвращает экземпляр cls, то новый экземпляр __init __() будет вызываться как __init __ (self [,...]), где self - это новый экземпляр, а остальные аргументы такие же, как и были переданы __new __().

__ init __() не будет вызываться, если __new __() переопределен и не возвращает экземпляр класса.

__ вызов __() вызывается, когда объект экземпляра вызывается как функция:

class MyObj:
  def __call__():
    print 'Called!'

>>> mo = MyObj()
>>> mo()
Called!

И, конечно же, вы можете определить __call __() с любыми аргументами и логикой, которые вы хотите.

Ответ 2

__init__ вызывается при инициализации объекта

http://docs.python.org/reference/datamodel.html#object.__init__