刚开始学习python时,我遇到过__call__方法。我通过运行一个简单的示例来了解何时调用__init__和何时调用__call__

class Constructor:
    def __init__(self, a):
        print "__init__ called"

    def __call__(self):
        print "__call__ called"

    def dummy(self):
        print "a dummy method called"

print "creating x obj"
x = Constructor(1)
print "calling x object"
x()


控制台输出:

creating x obj
__init__ called
calling x object
__call__ called


我的问题是:


我来自Java背景,我知道__init__映射到java构造函数,java是否具有等效于__call__的等效项来帮助我更好地理解这一点?
有人可以举一个简单的例子说明__call__何时有用吗?

最佳答案

__call__等同于在类上重载()运算符。这在C ++中是可能的,但在Java中是不可能的。它允许一个拥有功能对象(有时称为函子)的对象。

在Python中,这些被称为可调用对象。

简单来说,这使您可以将对象视为函数。

此类概念的实际使用超出了此答案的范围,但是Internet上有大量信息。例如Wikipedia

10-07 16:18
查看更多