在python中,new、init、call等方法不是必须写的,会默认调用,如果自己定义了,就是override,可以custom。既然override了,通常也会显式调用进行补偿以达到extend的目的。
class Bar(object):def __new__(cls, *args):self = super(Bar, cls).__new__(cls)#self = super().__new__(cls) #py3print '__new__'return selfdef __init__(self, *args):print '__init__'self.name = args[0]def __call__(self, *args):print '__call__', argstest = Bar() #实例化一个类,先调用__new__,再调用__init__test() #把对象当作函数一样执行,调用__call__
在实例化类的时候,new方法先被调用,返回一个实例对象,接着 init 被调用。
实例化后的对象,再当函数一样执行就会执行到这个call函数。
