python多重繼承 多繼承相關

2021-08-21 12:41:25 字數 1865 閱讀 1220

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...