刚开始学习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。