抱歉,我想不出更好的標題。
請考慮這個例子:
class A:
def __init__(self, x):
self.attr = x
class B(A):
x = 1
def __init__(self):
super().__init__(x=self.x)
class C(B):
x = 2
def __init__(self):
super().__init__()
c = C()
print(c.attr) # 2
此代碼列印2.
這意味著selfinB.__init__是 的一個實體C,而不是B。
我認為 的目的super是參考父類的方法/屬性。有人可以解釋輸出背后的邏輯不是1嗎?謝謝你。
uj5u.com熱心網友回復:
super()in的目的super().__init__()是呼叫__init__()父級的方法。它不會改變物件本身——它仍然是子類的一個實體。因此,子類覆寫的任何內容都將在實體中可見。
如果父方法不想要 的覆寫值x,它應該使用B.x而不是self.x. 通過訪問屬性的全部self目的是利用子類中的覆寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/489682.html
上一篇:為什么是子類[類(匿名)]
下一篇:HCIA-OSPF協議
