繁体   English   中英

__init__还是__call__?

[英]__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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM