1 使用父類名.方法名呼叫父類方法
class parent():
def __init__(self,name):
self.name = name
print("parent的init方法被呼叫")
class son1(parent):
def __init__(self,name,age):
self.age = age
parent.__init__(self,name)
print("son1的init方法被呼叫")
class son2(parent):
def __init__(self,name,gender):
self.gender = gender
parent.__init__(self,name)
print("son2的init方法被呼叫")
class grandson(son1,son2):
def __init__(self,name,age,gender):
son1.__init__(self,name,age)
son2.__init__(self,name,gender)
print("grandson的init方法被呼叫")
g = grandson("laowang",22,"男")
輸出結果:
parent的init方法被呼叫
son1的init方法被呼叫
parent的init方法被呼叫
son2的init方法被呼叫
grandson的init方法被呼叫
2 使用super().方法名的方式呼叫父類方法:
class parent():
def __init__(self,*args):
self.name = args[2]
print("parent的init方法被呼叫")
class son1(parent):
def __init__(self,*args):
name,self.age,gender = args
super().__init__(*args)
print("son1的init方法被呼叫")
class son2(parent):
def __init__(self,*args):
name,age,self.gender = args
super().__init__(*args)
print("son2的init方法被呼叫")
class grandson(son1,son2):
def __init__(self,name,age,gender):
super().__init__(name,age,gender)
print("grandson的init方法被呼叫")
g = grandson("laowang",22,"男")
print(grandson.__mro__)
輸出結果:
parent的init方法被呼叫
son2的init方法被呼叫
son1的init方法被呼叫
grandson的init方法被呼叫
(, , , , )
由上述**得出結論:
使用父類名.方法名()方式呼叫父類方法在多重繼承中會造成父類被重複呼叫。
而使用super().方法名()方式呼叫父類方法則不會重複呼叫。
關於使用super()呼叫父類方法時**的執行順序:
使用類名.__mro__可以檢視當前類的多重繼承執行順序,該執行順序是使用c3演算法計算得出。
多繼承與多重繼承
什莫是多繼承?乙個類擁有兩個或者兩個以上的父類 什莫是多重繼承?乙個類不僅僅有父類還有祖父類 什莫是虛繼承?虛繼承是為了解決多繼承的問題 經過這樣的宣告後,當基類通過多條派生路徑被乙個派生類繼承時,該派生類只繼承該基類一次,也就是說,基類成員只保留一次。菱形繼承 以往,在派生類的建構函式中只需負責對...
C 多繼承 多重繼承
派生類都只有乙個基類,稱為單繼承。除此之外,c 也支援多繼承,即乙個派生類可以有兩個或多個基類。多繼承的語法也很簡單,將多個基類用逗號隔開。例如已宣告了類a 類b和類c,那麼可以這樣來宣告派生類d class d public a,private b,protected c d 是多繼承形式的派生類...
C 繼承5 多重繼承 多繼承
多重繼承 1.person類,資料成員 m strname 成員函式 構造 析構 pay 2.soldier類,資料成員 m iage 成員函式 構造 析構 work 3.infantry類,資料成員 無 成員函式 構造 析構 attack 4.定義函式test1 person p test2 pe...