我应该何时使用__init__
和__call__
方法?
我很困惑我是应该使用第一个还是第二个。
目前我可以同时使用它们,但我不知道哪个更合适。
答案 0 :(得分:16)
这两者完全不同。
__init__()
是构造函数,它在对象的新实例上运行。
__call__()
,就像它是一个函数一样。
例如:假设我们有一个班级,Test
:
a = Test() #This will call Test.__init__() (among other things)
a() #This will call Test.__call__()
答案 1 :(得分:9)
快速测试显示它们之间的区别
class Foo(object):
def __init__(self):
print "init"
def __call__(self):
print "call"
f = Foo() # prints "init"
f() # prints "call"
这些可以互换
答案 2 :(得分:7)
最有可能的是,您想使用__init__
。这是用于初始化类的新实例的方法,您可以通过调用该类来创建该实例。 __call__
以防万一你想让你的实例可以调用。这不是经常做的事情,虽然它可能有用。这个例子应该说明:
>>> class C(object):
... def __init__(self):
... print 'init'
... def __call__(self):
... print 'call'
...
>>> c = C()
init
>>> c()
call
>>>
答案 3 :(得分:1)
一个简单的代码片段会更好地阐述它。
>>> class Math:
... def __init__(self):
... self.x,self.y=20,30
... def __call__(self):
... return self.x+self.y
...
>>> m=Math()
>>> m()
50