Python3之物件導向的三大特性 繼承(2)

2021-08-27 14:21:15 字數 2859 閱讀 2174

#繼承和派生

什麼是繼承派生呢?

繼承:從已有類中派生出新的類,具有原類的屬性和行為,並且可以新增新的行為

派生:從已有類中派生出新的類,在新類的基礎上新增新的屬性和行為

通俗的講:

小明他⑧有一套房和一輛車,百年之後小明繼承了他⑧的房和車,這就是繼承,派生就是在繼承的房和成進行一定的改裝,或裝修。

為什麼使用繼承或派生呢?

繼承的目的就是延續舊的類的功能

派生的目的就是在舊類的基礎上改變原有的功能

使用繼承或派生可以節省我們大量的寫重複**的時間,比如自行車和電動車,肯定先有的自行車,後有的電動車,自行車有的功能電動車基本都有這就是繼承,然後在此基礎之上改裝使用電,這就是派生了

名詞解釋:

基類/超類/父類是繼承的原類(自行車)

派生類/子類是(電動車)

繼承分為單繼承個多繼承

單繼承:只繼承乙個基類

語法:

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