python: __call__() 为什么在绑定实例的时候会调用呢?

在网上看到一个网友的提问:

>>> class test(type):

…     pass

>>> class test1(test):

…     def __call__(self):

…             print “I am in call”

>>> class test2(object):

…     __metaclass__=test1

>>> t=test2()

I am in call

这里的__call__() 为什么在绑定实例的时候会调用呢?

这里首先要知道,__call__()是什么时候被调用。看下面的例子:

>>> class test:
…     def __call__(self):
…             print “I am in test”

>>> t = test()
>>> t()
I am in test

当类的对象(也叫绑定实例)t  在执行t()的时候__call__被调用。

当一个类的实例带有参数(arg1,arg2…)的时候,自动调用__call__()函数。

再来看一开始的例子。

test2是test1的实例。因为test1是元类。test2()相当于实例带有参数的调用。所以这里面__call_()在绑定的实例的时候会调用。

    原文作者:xiaofeng_yan
    原文地址: https://blog.csdn.net/xiaofeng_yan/article/details/6632838
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞