首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fct.__call__()与fct()不一样?

为什么fct.__call__()与fct()不一样?
EN

Stack Overflow用户
提问于 2022-09-04 18:28:49
回答 1查看 50关注 0票数 2

类的__call__ dunder方法应该表示操作符(),对吗?如果是这样的话,为什么下面的代码不能按预期工作呢?

代码语言:javascript
复制
def f():
    print("hello world")

f()
>>>hello world

f.__call__ = lambda: print("foo") #replace the call operator

f()
>>>hello world

f.__call__()
>>>foo

<class 'function'>正在发生一些特别的事情,有人能照亮这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-05 06:02:44

您没有更改类的__call__方法。您已经更改了类实例的__call__方法。这就是区别所在。您需要更改函数类的__call__方法,这当然不是您真正想要的。

关于这方面的文件很简短:

代码语言:javascript
复制
    Class Instances
        Instances of arbitrary classes can be made callable by defining
        a __call__() method in their class.

它明确地说“在他们的类”,而不是“在实例中”。这只是Python的设计决定。您可以想象,如果一个类的不同实例在这种情况下的行为是不同的,那么它将是多么的混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73601861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档