Python类中哪个方法调用`__init__()`?

12 投票
2 回答
3216 浏览
提问于 2025-04-17 00:31

我在想,__init__() 这个方法是怎么被调用的。是 __new__() 调用它,还是 __call__() 在用 __new__() 创建了一个实例后再调用它,或者是其他什么方式呢?

2 个回答

3

__init__ 是在创建一个对象的时候被调用的

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

在Python中,决定是否调用 __new__() 后面跟着的 __init__() 方法的规则是这样的:

如果 __new__() 返回的是这个类的一个实例,那么新创建的实例会调用 __init__() 方法,形式是 __init__(self[, ...]),其中 self 就是新创建的实例,后面的参数和传给 __new__() 的参数是一样的。

如果你重写了 __new__() 方法,并且它没有返回这个类的实例,那么 __init__() 方法就不会被调用。

当你像调用函数一样调用一个实例对象时,会触发 __call__() 方法:

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

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

当然,你可以根据自己的需要定义 __call__() 方法,传入任何参数和逻辑。

撰写回答