Мне было интересно, как вызываются методы __init__()
. Вызывает ли его __new__()
, или __call__()
вызывает его после создания экземпляра с помощью __new__()
или каким-либо другим способом?
Какой метод вызывает `__init __()` в классах Python
Ответ 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__