类初始化

时间:2013-02-25 15:02:20

标签: python pyqt

我只有一个关于初始化的小问题。在Python中,当我们进行Multiply继承时,调用子类的超级函数并将它们分别调用它们之间的区别是什么?

classA(B,C)

super(A,self).__init__()

#---and---#

B.__init__(self)
C.__init__(self)

由于

1 个答案:

答案 0 :(得分:1)

主要区别在于,如果B类和C类具有共同的祖先,并且super()调用,则祖先的__init__()将仅被调用一次。通过在示例中明确地调用父母的__init__()方法,共同的祖先__init__()将最终被调用两次。

您可以从Guido's explanation了解super()如何完成此操作。

以下是对父母__init__()的明确调用以及它如何称呼共同祖先两次的演示:

>>> class A(object):
...   def __init__(self):
...     print "A"
... 
>>> class B(A):
...   def __init__(self):
...     A.__init__(self)
...     print "B"
... 
>>> class C(A):
...   def __init__(self):
...     A.__init__(self)
...     print "C"
... 
>>> class D(B,C):
...   def __init__(self):
...     B.__init__(self)
...     C.__init__(self)
...     print "D"
... 
>>> D()
A
B
A
C
D
<__main__.D object at 0x106de1d10>
>>> 

这就是super()

所发生的事情
>>> class A(object):
...   def __init__(self):
...     print "A"
... 
>>> class B(A):
...   def __init__(self):
...     super(B,self).__init__()
...     print "B"
... 
>>> class C(A):
...   def __init__(self):
...     super(C,self).__init__()
...     print "C"
... 
>>> class D(B,C):
...   def __init__(self):
...     super(D,self).__init__()
...     print "D"
... 
>>> D()
A
C
B
D
<__main__.D object at 0x10d34ec90>
>>>