什么方法在Python类中调用`__init __()`

yas*_*sar 12 python methods class

我想知道如何__init__()调用方法.是__new__()调用它,还是__call__()在用它创建实例之后调用它,或者用__new__()其他方式调用它?

and*_*kus 8

Python确定__new __()是否应该调用__init __():

如果__new __()返回一个cls实例,那么新实例的__init __()方法将被调用,如__init __(self [,...]),其中self是新实例,其余参数与传递给的相同. __新__().

如果重写__new __()并且不返回该类的实例,则不会调用__init __().

当像函数一样调用实例对象时,会调用__call __():

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

>>> mo = MyObj()
>>> mo()
Called!
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用您想要的任何参数和逻辑来定义__call __().

  • 更准确地说,它是由Python运行时隐式调用的.您可以编写自己的`__new__`,它不会调用`__init__`,只要您返回类的实例,它仍然会被调用. (3认同)
  • 需要注意的重要事项...... Pythnon的运行时将调用`__init__`*每当*`__new__`返回`cls`的实例时,即使它已经被初始化(例如,从缓存返回); 如果返回值不是`cls`的实例,它将不会调用任何类型的`__init__`. (2认同)