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)
快速测试显示了它们之间的差异
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)
这些可以互换
最有可能的是,你想要使用__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)
| 归档时间: |
|
| 查看次数: |
2754 次 |
| 最近记录: |