刚开始学习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
我的问题是:
__init__
映射到java构造函数,java是否等同于__call__
以帮助我更好地理解这一点?__call__
何时有用?答案 0 :(得分:5)
__call__
等同于在类上重载()
运算符。这在C ++中是可能的,但不是Java。它允许拥有功能对象(有时称为仿函数)。
在Python中,这些被称为可调用对象。
简单来说,这允许您将对象视为函数。
这些概念的实际用途超出了本答案的范围,但互联网上有大量信息。例如Wikipedia。
答案 1 :(得分:3)
不,Java中没有像__call__
这样的东西。您不能将对象用作方法调用。你必须创建一个方法并调用它:
class Constructor{
Constructor(){
System.out.println("Constructor called");
}
void doStuff(){
System.out.println("do called");
}
public static void main(String[] args){
System.out.println("Creatng x obj");
x = new Constuctor();
System.out.println("Calling x obj");
x.doStuff();
}
}