1

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

我的问题是:

  1. 我来自java背景,我知道__init__映射到java构造函数,java是否有一个等价物__call__来帮助我更好地理解这一点?
  2. 有人可以给我一个简单的例子,说明什么时候__call__有用吗?
4

2 回答 2

5

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

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

简单来说,这允许您将对象视为函数。

这些概念的实际用途超出了这个答案的范围,但互联网上有很多信息。例如维基百科

于 2013-03-18T10:49:08.723 回答
3

__call__不,在 Java中没有任何东西。您不能将对象用作方法调用。您必须创建一个方法并调用它:

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();
    }
}
于 2013-03-18T10:47:00.190 回答