python類的繼承與多型

2021-08-21 00:07:04 字數 2175 閱讀 9187

繼承:

class 類名(父類名)

子類繼承父類,執行初始化__init__時, 子類屬性要把 父類名.__init__方法(屬性) 全部寫上 ,在給物件賦值 

如果子類物件使用父類的方法屬性:

1可以在子類方法中,寫上父類的方法及屬性 ,     父類__init__方法(屬性)         ————經典類寫法

2或者用super呼叫父類方法, super(或空/或寫子類名稱,self).__init__(方法屬性)——新式類寫法

好處:不用寫父類名,當改變父類名稱時,可以不用重新改,或繼承多個父類,使用屬性或方法時,會自動排序執行

python3.x 和 python2.x 的乙個區別是:

python 3 可以使用直接使用 super().方法(屬性)代替 super(class, self).方法 (屬性)

繼承多個父類時,執行從左到右,如果父類方法名稱相同,預設呼叫第乙個父類方法,

多個子類繼承同乙個父類時,子類的方法各自屬於自己不可以共用,

父類中的私有屬性,子類不可以使用,繼承父類後,一般情況下例項化子類,不會例項化父類

經典類和新式類:

新式類後面加(object)

經典類後面預設不加 

繼承多個父類時,如果多個初始化方法,預設走第乙個父類的初始化方法,從左到右執行,如果多個巢狀繼承:

class a:

class b (a):

class c (b)

class d(b,c)

廣度優先——預設執行b- c- a,如果b有初始化方法,則不走其他父類,如果沒有在走c執行(橫向查詢)

深度優先——預設執行b-a,      ~~~~同上~~~~~~~    如果b沒有初始化方法,則去找b的父類(深度查詢)

python2——經典類按深度優先查詢繼承,新式類按廣度優先查詢繼承

python3——經典類和新式類都按廣度優先查詢繼承

方法重寫:如果子類中方法名和父類重複,預設用子類方法,如果沒有預設用父類。 

如果想改變父類方法可以子類從新寫父類方法,會預設執行子類方法

排列順序 sort ():

寫乙個__lt__(順序)方法(self.定義要比較的屬性乙個新名稱) return 回比較的方式 self.屬性 < 新屬性名稱.屬性

排序示例:                      

class che:

def __init__(self,pinpai,yanse):

self.pinpai=pinpai

self.yanse=yanse

def qidong(self):

print("啟動小汽車")

class xiao(che):

def __init__(self,pinpai,yanse,zuowei,):

self.zuowei=zuowei

super().__init__(pinpai,yanse)

print("品牌; 顏色 座位".format(self.pinpai,self.yanse,self.zuowei))

def __lt__(self, other):

return self.yansedef __str__(self):

return "品牌; 顏色 座位".format(self.pinpai,self.yanse,self.zuowei)

qiche=xiao("寶馬","bb色",9)

# qiche.qidong()

qiche2=xiao("寶馬","cc色",6)

qiche3=xiao("寶馬","aa色",8)

lie=[qiche,qiche2,qiche3]

lie.sort()

for i in lie:

print(i)         

#執行結果---會自動按照yanse屬性abc來排序

品牌;寶馬 顏色bb色 座位9

品牌;寶馬 顏色cc色 座位6

品牌;寶馬 顏色aa色 座位8

品牌;寶馬 顏色aa色 座位8

品牌;寶馬 顏色bb色 座位9

品牌;寶馬 顏色cc色 座位6

多型:統一介面,多種實現,可以用靜態方法實現,子類繼承父類,重寫父類方法,一種同乙個方法名展現不同結果,實現多型

python類的繼承與多型

定義乙個類 class animal object defrun self print animal is runnning 繼承此類 class dog animal pass例項化 dog.run animal is runnning 以上 母類擁有乙個方法 此方法會繼承到子類,故子類也可以執行...

python 類的繼承與多型

類的繼承 class anmial object anmial 類繼承object def init self,self.def eat self print anmial is eating def run self print running class cat anmial cat類繼承anm...

python類封裝,繼承與多型

將類的函式偽裝成物件的屬性,使用該裝飾器裝飾的類的方法 可用物件名.方法名呼叫。此時不用加括號 此時的learn方法是用的類屬性的呼叫方式進行呼叫 類的繼承方式,在類名的括號中加入要繼承類的類名,當要繼承多個類時,用逗號隔開。利用類的內建屬性 bases 可以檢視當前類繼承了哪些類 在物件呼叫方法時...