#繼承和派生
什麼是繼承派生呢?
繼承:從已有類中派生出新的類,具有原類的屬性和行為,並且可以新增新的行為
派生:從已有類中派生出新的類,在新類的基礎上新增新的屬性和行為
通俗的講:
小明他⑧有一套房和一輛車,百年之後小明繼承了他⑧的房和車,這就是繼承,派生就是在繼承的房和成進行一定的改裝,或裝修。
為什麼使用繼承或派生呢?
繼承的目的就是延續舊的類的功能
派生的目的就是在舊類的基礎上改變原有的功能
使用繼承或派生可以節省我們大量的寫重複**的時間,比如自行車和電動車,肯定先有的自行車,後有的電動車,自行車有的功能電動車基本都有這就是繼承,然後在此基礎之上改裝使用電,這就是派生了
名詞解釋:
基類/超類/父類是繼承的原類(自行車)
派生類/子類是(電動車)
繼承分為單繼承個多繼承
單繼承:只繼承乙個基類
語法:
class 類名(基類名):
語句塊
舉個小栗子:
class human:
def say(self, what): # 說話行為
print('說',what)
def walk(self, distance): # 走路行為
print('走了', distance, '公里')
class student(human): # 繼承了human類,有說話行為和走路行為
def study(self, subject): # 改裝,新增學習的行為,student類就可以說是由human派生出來的類
print('正在學', subject)
class teacher(student): # 繼承了student類,有說話行為、走路行為、學習行為
def teach(self, subject): # 改裝,再新增乙個教書的行為
print('正在教', subject)
h1 = human() # 建立乙個human例項物件
h1.say('今天天氣真好')
h1.walk(5)
s1 = student() # 呼叫乙個student例項物件
s1.walk(4)
print('走的有點了類,先休息一下')
s1.study('python')
t1 = teacher() # 建立乙個teacher例項物件
t1.walk(4)
print('走的有點了類,先休息一下')
t1.teach('python')
注釋寫的很明白,就不做詳細解釋了
那麼繼承派生的作用是什麼?
可以將一些共有的功能加在基類中,實現**的共享
在不改變基類的基礎上改變原有的功能
提出乙個問題:human繼承誰呢?
在python3中任何類都直接或間接的繼承object類
object是一切類的超類
human繼承的object,可以這麼寫
class human(object):
pass
多繼承:繼承兩個或兩個以上基類
語法:
class 類名(基類1,基類2...):
pass
說明:
乙個子類同時繼承多個父類,父類的方法可以同時被繼承下來,如果兩個父類中有同名的方法,而在子類中又沒有覆蓋此方法時,呼叫先繼承的類的方法。
舉個栗子:
class a:
def m(self):
print('a.m被呼叫')
class b:
def m(self):
print('b.m被呼叫')
class ab(a, b): # 對於m方法來說,先繼承a,後繼承b
pass
ab = ab()
ab.m() # 呼叫先繼承的裡邊的方法
執行結果就是:
a.m被呼叫
這也是多繼承的乙個缺陷,要謹慎使用多繼承
如何檢視類的基類?
__bases__ # 記錄類的基類
語法:
print(類名.__bases__)
如上述例子我們分別檢視一下teacher、student、human的基類是誰!
print(teacher.__bases__)
print(student.__bases__)
print(human.__bases__)
列印結果:
(,)
(,)(,)
####判斷是否是誰的派生類,或是否是繼承了 某類
語法格式:
issubclass(cls,class_or_tuple)
是則返回true,否則返回false
舉個簡單的栗子:
>>> class a:
pass
>>> class b(a):
pass
>>> class c(b):
pass
>>> issubclass(b,a)
true
>>> issubclass(c,a)
true
>>> issubclass(c,b)
true
>>> issubclass(c,(a,b))
true
本節完 python3之物件導向 屬性
物件導向程式設計中屬性有 成員屬性 類屬性 例項屬性。成員屬性 在類的初始化方法中繫結的屬性 類屬性 歸所在類所有,但該類和該類的所有例項都可以訪問到 例項屬性 在例項化物件時對當前物件增加的屬性,只有該物件可以訪問。class person person類 num 20 類屬性 def init ...
python3高階之物件導向 一
定義類 class car 方法 def getcarinfo self print 車輪子個數 d,顏色 s self.wheelnum,self.color def move self print 車正在移動.usr bin python coding utf 8 class employee ...
python3物件導向
類 class 描述同屬性和方法的物件的集合。方法 類中定義的函式 例項化 建立乙個類的例項,類的具體物件。物件 通過類定的資料例。包括兩個資料成員 類變數和例項變數 和方法。支援操作 屬性引用和例項化 class myclass i 12345 deff self return hello wor...