__init__或__call__?

Jer*_*myL 7 python

我何时应该使用__init__何时使用__call__方法?

我很困惑我是否应该使用第一个或第二个.

目前我可以同时使用它们,但我不知道哪个更合适.

Gar*_*tty 17

这两者完全不同.

__init__() 是构造函数,它在对象的新实例上运行.

__call__() 当您尝试调用对象的实例时运行,就像它是一个函数一样.

例如:假设我们有一个班级,Test:

a = Test() #This will call Test.__init__() (among other things)
a() #This will call Test.__call__()
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 9

快速测试显示了它们之间的差异

class Foo(object):
    def __init__(self):
        print "init"
    def __call__(self):
        print "call"

f = Foo()  # prints "init"
f()        # prints "call"
Run Code Online (Sandbox Code Playgroud)

这些可以互换


Phi*_*ost 7

最有可能的是,你想要使用__init__.这是用于初始化类的新实例的方法,您可以通过调用该类来创建该实例.__call__以防你想让你的实例可调用.这不是经常做的事情,虽然它可能有用.这个例子应该说明:

>>> class C(object):
...   def __init__(self):
...     print 'init'
...   def __call__(self):
...     print 'call'
... 
>>> c = C()
init
>>> c()
call
>>> 
Run Code Online (Sandbox Code Playgroud)