__init__或__call__?

时间:2012-12-31 16:32:17

标签: python

我应该何时使用__init____call__方法?

我很困惑我是应该使用第一个还是第二个。

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

4 个答案:

答案 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