Python函数及其__call__属性

时间:2012-03-14 18:07:07

标签: python

我正在使用Python 2.7.2。我想了解调用函数和调用函数的__call__属性之间的关系。例如,请考虑以下代码

def foo():
    return 5
print foo()          # ==> 5
print foo.__call__() # ==> 5

foo.__call__ = lambda : 6
print foo()          # ==> 5
print foo.__call__() # ==> 6

第一,第四行似乎表示调用函数foo与调用__call__的{​​{1}}属性相同。但是,最后三行似乎表明它们是不同的野兽,因为我更改了foo属性,但它没有更改调用__call__返回的值。

有人可以解释调用foo()和调用foo()之间的关系吗?有没有办法修改函数的行为,以便foo.__call__()以及foo()现在返回6而不是5?

1 个答案:

答案 0 :(得分:11)

我建议你阅读special method lookup for new-style classes(特别是最后一段)。

  

对于新式类,特殊方法的隐式调用是   只保证在对象的类型上定义时才能正常工作,而不是   在对象的实例字典中。

相关问题