class M(object):
def __init__(self):
print("M constructor")
super().__init__()
class F(M):
def __init__(self):
print("F constructor")
super().__init__()
class C(F):
def __init__(self):
print("C constructor")
super().__init__()
class D(C,F):
def __init__(self):
print("D constructor")
C().__init__()
D()
輸出是:
D constructor
C constructor
F constructor
M constructor
C constructor
F constructor
M constructor
我期待:
D constructor
C constructor
F constructor
M constructor
uj5u.com熱心網友回復:
C().__init__()等效于:
temp = C()
temp.__init__()
呼叫時C(),類中的__init__()方法C會被自動呼叫,因此它會列印C constructor并呼叫所有父建構式。
然后顯式呼叫該__init__()方法,因此它重復此程序。
如果您只想呼叫C建構式而不創建臨時實體,請使用C.__init__(self).
uj5u.com熱心網友回復:
您正在程式中創建兩個物件:一個D物件和一個C物件(您在D建構式中創建,在創建實體后通過手動呼叫進行兩次初始化__init__(),然后丟棄)。
如果您想在C' 的初始化程式中顯式呼叫 's 初始化D程式(而不是使用super()),那么正確的方法是:
C.__init__(self)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491188.html
標籤:Python python-3.x 哎呀
上一篇:這個班級是建設者嗎?
