在python中,newinitcall等方法不是必须写的,会默认调用,如果自己定义了,就是override,可以custom。既然override了,通常也会显式调用进行补偿以达到extend的目的。

    1. class Bar(object):
    2. def __new__(cls, *args):
    3. self = super(Bar, cls).__new__(cls)
    4. #self = super().__new__(cls) #py3
    5. print '__new__'
    6. return self
    7. def __init__(self, *args):
    8. print '__init__'
    9. self.name = args[0]
    10. def __call__(self, *args):
    11. print '__call__', args
    12. test = Bar() #实例化一个类,先调用__new__,再调用__init__
    13. test() #把对象当作函数一样执行,调用__call__


    在实例化类的时候,new方法先被调用,返回一个实例对象,接着 init 被调用。
    实例化后的对象,再当函数一样执行就会执行到这个call函数。

    参考:
    https://www.cnblogs.com/huchong/p/8260151.html#_label2