如何在Python中覆盖方法对象的__call__方法?

参见英文答案 > Python functions and their __call__ attribute                                    1个
这是我到目前为止正在使用的内容

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__,并不像我期望的那样工作.

最佳答案
这似乎是由于ceval.c函数类型的特殊大小,在call_function中:

if (PyFunction_Check(func))
    x = fast_function(func,pp_stack,n,na,nk);
else
    x = do_call(func,nk);

我猜这可能是为了提高效率,因为调用常规函数并忽略__call__属性是迄今为止最常见的调用方式.

相关文章

我最近重新拾起了计算机视觉,借助Python的opencv还有face_r...
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Poolin...
记得大一学Python的时候,有一个题目是判断一个数是否是复数...
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic ...
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic v...
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic ...