加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 21:49:46 所属栏目:Python 来源:网络整理
导读:参见英文答案 Python functions and their __call__ attribute????????????????????????????????????1个 这是我到目前为止正在使用的内容 def f(n): return nf.__call__ = lambda n: n + 1print f(2) #I expect an output of 3 but get an output of 2 我对

参见英文答案 > 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__属性是迄今为止最常见的调用方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读