python菱形繼承 Python 繼承

2021-10-19 21:55:59 字數 2009 閱讀 7747

python繼承》思維導圖》

什麼是繼承?繼承是一種關係,描述兩個物件之間,什麼是什麼的關係

例如麥兜,佩奇,豬剛鬣 都是豬啊,

在程式中,繼承描述的是類和類之間的關係

例如a繼承了b, a就能直接使用b已經存在的方法和屬性

a稱之為子類,b稱之為父類,也稱之為基類

為什麼要使用繼承

繼承的一方可以直接使用被繼承一方已經有的東西

其目的是為了重用已經有的**,提高重用性

如何使用繼承

語法class 類名稱(父類的名稱):

類的內容

#在python中 乙個子類可以同時繼承多個父類

抽象不具體,不清晰,很模糊,看不懂

將多個子類中相同的部分,進行抽取,形成乙個新的類,這個過程也稱之為抽象的過程

正確的使用繼承:

1.先抽象在繼承

2.繼承乙個已經現存的類,擴充套件或是修改原始的功能

屬性的查詢順序class a:

text = "haha"

class b(a):

text = "heihei"

pass

b = b()

b.text = "xixi"

print(b.text)

物件自己的 - > 所在類中 -> 找父類 - >父類的父類 ->object

派生當乙個子類**現了與父類中不同的內容時,這個子類就稱之為派生類

通常子類都會寫一些新的**,不可能和父類完全一樣 , 既通常都是派生類,

所以派生類指的就是子類

覆蓋也稱之為重寫 overrides

當子類出現了與父類名稱完全一致的屬性或是方法

練習:實現乙個可以限制元素型別的容器 (字典,列表,元組,集合,字串)class mylist(list):

def __init__(self,element_type):

super().__init__()

self.element_type = element_type

if type(object) == self.element_type:

else:

print("sorry sir, you element type not is %s" % self.element_type)

# 建立是指定要儲存的元素型別

m = mylist(int)

# 當你有需求,是需要在建立物件時 幹點什麼事兒  那就該想到初始化方法

print(m[0])

子類中訪問父類的內容

語法方式1:

super(當前類名稱,self).你要調的父類的屬性或方法

方式2:

super().你要調的父類的屬性或方法

方式3:

類名稱.你要調的父類的屬性或方法(self)

#方式3與繼承無關

強調再強調:當你繼承乙個現有的類,並且你覆蓋了父類的init方法時,必須在初始化方法的第一行呼叫父類的初始化方法,並傳入父類所需的引數

組合也是一種關係,描述兩個物件之間 是什麼有什麼的關係

例如,學生有手機 ,遊戲中角色擁有某些裝備

將乙個物件作為另乙個物件的屬性,(既什麼有什麼)

組合的目的也是為了重用現有**

什麼時候使用繼承:分析兩個類的關係,到底是不是:什麼是什麼的關係

什麼時候使用組合:如果兩個類之間 沒有太大的關係,完全不屬於同類

另外組合相比繼承,耦合度更低了

菱形繼承

首先明確python支援多繼承

補充:新式類與經典類python3中任何類都是直接或間接繼承了object

新式類,任何顯式或隱式地繼承自object的類就稱之為新式類, python3中全都是新式類

經典類,既不是object的子類 ,僅在python2**現

當出現了菱形繼承時,新式類,先深度,當遇到了共同父類時就廣度

經典類,就是深度優先

菱形繼承 菱形虛擬繼承

菱形繼承 鑽石繼承 模型 拿如下 舉例 class person class student public person class teacher public person class graduate public student,public teacher void test 當派生類gr...

菱形繼承和菱形虛繼承

繼承是c 的一大特點,我們通過菱形繼承和菱形虛繼承對繼承進行進一步的分析。菱形繼承 建立乙個基類a讓b1和b2公有繼承於它,讓c公有繼承b1和b2。class a a int a class b1 public a b1 int b1 class b2 public a b2 int b2 clas...

多重繼承(菱形繼承)

多重繼承 經典的是菱形繼承,如圖。菱形繼承將會產生的問題 把基類a中的成員變數通過b和c兩次繼承至d。d的繼承結構 可以看到,ma被繼承兩次至d 那麼將如何解決這個問題呢?採用虛繼承的方法,將基類a中的ma直接繼承至d。如下 class a int ma class b virtual public...