Python类中哪个方法调用`__init__()`?
我在想,__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__()
方法,传入任何参数和逻辑。