1
我只是有一個關於初始化的小問題。在Python中,當我們做一個Multiply繼承時,調用子類的超級函數並將它們分開調用的區別是什麼?類初始化
classA(B,C)
super(A,self).__init__()
#---and---#
B.__init__(self)
C.__init__(self)
感謝
我只是有一個關於初始化的小問題。在Python中,當我們做一個Multiply繼承時,調用子類的超級函數並將它們分開調用的區別是什麼?類初始化
classA(B,C)
super(A,self).__init__()
#---and---#
B.__init__(self)
C.__init__(self)
感謝
的主要區別是,如果類B和C有着共同的祖先,與super()
呼叫,該祖先的__init__()
纔會被調用一次。通過明確地調用父母的__init__()
方法,共同祖先的__init__()
將最終被調用兩次。
你可以閱讀關於super()
如何從Guido's explanation完成此操作。
下面是顯式調用的示範家長__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>
>>>
啊,我明白了。感謝了很多:D – illunara 2013-02-25 15:26:50
會發生什麼你的意思是在''''__init __()'方法的*裏放置'super()'*?請修復你的代碼,這段代碼會生成(顯而易見的)IndentationError,以及'classA'的NameError。 – 2013-02-25 15:04:40
哦,對不起。我簡單地寫了:D – illunara 2013-02-25 15:16:19