到目前为止,我正在使用
def f(n):
return n
f.__call__ = lambda n: n + 1
print f(2) #I expect an output of 3 but get an output of 2
我对实现所需输出的另一种方式不感兴趣。相反,出于教育目的,我想知道为什么像我一样覆盖__call__
,并不像我期望的那样工作。
答案 0 :(得分:4)
这似乎是由call_function
中的ceval.c中的函数类型的特殊大小引起的:
if (PyFunction_Check(func))
x = fast_function(func, pp_stack, n, na, nk);
else
x = do_call(func, pp_stack, na, nk);
我猜这可能是为了提高效率,因为调用常规函数并忽略__call__
属性是迄今为止最常见的调用类型。