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

标签 python

<分区>

这是我目前的工作

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, pp_stack, na, nk);

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

关于python - 如何在 Python 中覆盖方法对象的 __call__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199347/

相关文章:

一个进程中的Python命令行输入

python - 如何将原始数据与集群数据关联起来

python - 无法使用 OneToOne 关系中的属性自动填充 Django 管理字段

python - 如何从多对多关系中检索条目

python - 尝试在 Openerp 7.0 中安装自定义模块时出现 "Invalid XML for View Architecture"错误

python - 在 Python 2 的异常中处理错误?

python - 如何向 3d 数组的每个 2d 数组添加(而不是追加)2d 数组?

python - 具有两个特征的梯度下降计算特征空间

python - 在docker上使用python 2.7的Ubuntu上pip install mysqlclient失败

Python - 解析 URL 字符串并提取它们