繼承
組合oop的三大特徵之一:封裝,繼承,多型
繼承什麼是繼承?
#繼承是一種關係,描述兩個物件之間,什麼是什麼的關係
例如:麥兜,佩奇,豬剛鬣 都是豬啊,
#在程式中,繼承描述的是類和類之間的關係
例如:a繼承了b, a就能直接使用b已經存在的方法和屬性,a稱之為子類,b稱之為父類,也稱之為基類
為什麼要使用繼承?
#繼承的一方可以直接使用被繼承一方已經有的東西
其目的是為了重用已經有的**,提高重用性
如何使用繼承?
語法:class
類名稱(父類的名稱):
類的內容
#在python中 乙個子類可以同時繼承多個父類
基本語法
classbase:
bsec = '
這是乙個基類
'def
msg(self):
(self.bsec)
defmake_money(self):
print('
一天乙個小目標')
class
subbase(base):
pass
sub = subbase() #
少了乙個括號
sub.make_money()
#typeerror: make_money() missing 1 required positional argument: 'self'
print(sub.bsec) #
sub.msg()
正確的使用繼承:
#1.先抽象在繼承
#2.繼承乙個已經現存的類,擴充套件或是修改原始的功能
附:關於抽象
#不具體,不清晰,很模糊,看不懂
#將多個子類中相同的部分,進行抽取,形成乙個新的類,這個過程也稱之為抽象的過程
正確的使用繼承:
屬性的查詢順序:
classa:text = "
haha
"class
b(a):
text = "
heihei
"pass
b =b()
b.text = "
xixi
"print(b.text)
# 物件自己的 - > 所在類中 -> 找父類 - >父類的父類 ->object
繼承相關術語:
#派生:當乙個子類**現了與父類中不同的內容時,這個子類就稱之為派生類
通常子類都會寫一些新的**,不可能和父類完全一樣,既通常都是派生類,所以派生類指的就是子類
#覆蓋:
也稱之為重寫 overrides
當子類出現了與父類名稱完全一致的屬性或是方法
練習:實現乙個可以限制元素型別的容器 (字典,列表,元組,集合,字串)
子類中訪問父類的內容:
語法:方式1:
super(當前類名稱,self).你要調的父類的屬性或方法
方式2:
super().你要調的父類的屬性或方法
方式3:
類名稱.你要調的父類的屬性或方法(self)
#方式3與繼承無關
強調再強調:
#當你繼承乙個現有的類,並且你覆蓋了父類的init方法時,必須在初始化方法的第一行呼叫父類的初始化方法,並傳入父類所需的引數
組合
#也是一種關係,描述兩個物件之間 是什麼有什麼的關係
例如,學生有手機 ,遊戲中角色擁有某些裝備
將乙個物件作為另乙個物件的屬性,(既什麼有什麼)
組合的目的:
#也是為了重用現有**
什麼時候使用繼承:分析兩個類的關係,到底是不是:什麼是什麼的關係
什麼時候使用組合:如果兩個類之間 沒有太大的關係,完全不屬於同類
另外組合相比繼承,耦合度更低了
了解知識點
## 菱形繼承
#首先明確python支援多繼承
補充:新式類與經典類
python3中任何類都是直接或間接繼承了object
新式類,任何顯式或隱式地繼承自object的類就稱之為新式類, python3中全都是新式類
經典類,既不是object的子類 ,僅在python2**現 #
當出現了菱形繼承時,新式類,先深度,當遇到了共同父類時就廣度
新式類,就是深度優先
# 小結:
1.繼承是什麼2.為什麼用繼承
3.語法
4.先抽象在繼承
6.派生
7.覆蓋
8.子類訪問父類的屬性或方法 super ().名字
如果你繼承乙個已有的類,並且你覆蓋了init 一定要先呼叫父類的init
9.繼承的原理,mro列表
10,新式類與經典類
11.菱形繼承 了解
12,屬性的查詢順序
day21物件導向 類
1 1 定義階段 2class harvordstudent 3 school harvord 4 defchoose course self 5print hello 6print harvordstudent 類的本質是命名空間 容器,可以增刪改查名字7 訪問屬性 命名空間中名字 的語法,之後的...
day21 物件導向高階
多型指的是一類事物有多種形態,比如動物有多種形態 貓 狗 豬 class animal 同一類事物 動物 def talk self pass class cat animal 動物的形態之一 貓 def talk self print 喵喵喵 class dog animal 動物的形態之二 狗 ...
C 學習day21之繼承與派生2
includeusing namespace std 這裡會輸出father和son,跟我們前面講的不一樣啊。這裡的父類構造器呼叫了。if 0 class father class son public father int main endif 如果你father int i 這樣的話,會報錯的。...