为什么fct__call__()与fct()不同



类的__call__dunder方法应该表示运算符(),对吗?如果是这样,为什么下面的代码没有按预期工作?


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'>发生了一些特别的事情有人能阐明这个问题吗?

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

关于这一点的文件很简洁:

Class Instances
Instances of arbitrary classes can be made callable by defining
a __call__() method in their class.

它特别地说";在他们的类中";,而不是";在实例"中;。这只是Python方面的一个设计决定。你可以想象,如果一个类的不同实例在这种情况下表现不同,会有多令人困惑。

相关内容

  • 没有找到相关文章

最新更新