[英]__init__ or __call__?
什么时候应该使用__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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.