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