假設我有這門課
class child(parent1, parent2):
pass
parent2.__init__如果 parent1 也有定義,是否可以訪問__init__?
這是我的完整代碼。
class parent1:
def __init__(self):
self.color="Blue"
class parent2:
def __init__(self):
self.figure="Triangle"
class child(parent1,parent2):
pass
juan=child()
try:
print(juan.color)
except Exception as e:
print(e)
try:
print(juan.figure)
except Exception as e:
print(e)
print(juan.__dict__)
我試過了
class child(parent1,parent2):
def __init__(self):
super(parent2).__init__()
但也許我錯過了什么?
謝謝。問候。
uj5u.com熱心網友回復:
parent1并且parent2,如果希望在協作多重繼承設定中使用,則應呼叫super.
class parent1:
def __init__(self):
super().__init__()
self.color = "Blue"
class parent2:
def __init__(self):
super().__init__()
self.figure = "Triangle"
當你定義 時child,它的方法決議順序決定了哪個__init__被首先呼叫,并且決定super()了每次呼叫時哪個類參考。在您的實際示例中,
class child(parent1,parent2):
pass
parent1.__init__被首先呼叫(因為child不覆寫__init__),它的使用是super()指parent2. 如果您改為定義
class child2(parent2, parent1):
pass
thenparent2.__init__將首先被呼叫,它的使用super()將參考parent1.
super()用于不確保object.__init__呼叫(不做任何事情),而是object.__init__存在以便一旦呼叫鏈到達末尾就可以呼叫它。super()(object.__init__本身不使用,super因為它保證是任何其他類的方法決議順序中的最后一個類。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/418003.html
標籤:
