Python編程基礎(第3版)(微課版)課件 6.5 類的繼承、重寫、封裝、多態(tài)_第1頁
Python編程基礎(第3版)(微課版)課件 6.5 類的繼承、重寫、封裝、多態(tài)_第2頁
Python編程基礎(第3版)(微課版)課件 6.5 類的繼承、重寫、封裝、多態(tài)_第3頁
Python編程基礎(第3版)(微課版)課件 6.5 類的繼承、重寫、封裝、多態(tài)_第4頁
Python編程基礎(第3版)(微課版)課件 6.5 類的繼承、重寫、封裝、多態(tài)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

類的繼承、重寫、封裝、多態(tài)1其他方法目錄繼承父類屬性和方法2【任務6-4】創(chuàng)建Land_Rover子類3繼承(inheritance)是兩個類或多個類之間的父子關系,子類繼承了父類的所有公有數(shù)據(jù)屬性和方法,并且可以通過編寫子類的代碼擴充子類的功能。繼承實現(xiàn)了數(shù)據(jù)屬性和方法的重用,減少了代碼的冗余。在程序中,繼承描述的是事物之間的所屬關系。例如,貓和狗都屬于動物,在程序中便可以描述為貓和狗繼承自動物;同理,波斯貓和巴厘貓都繼承自貓,而沙皮狗和斑點狗都繼承自狗,如下圖。1.繼承特定狗種類繼承自狗類,狗類繼承自動物類,狗類編寫了描述所有種類的狗共有的行為和方法,而特定狗種類則增加了狗類特有的行為。繼承也有一定的弊端,例如,某種特定種類的狗不具有絕大部分狗的行為,當程序員沒有厘清類間的關系時,可能會使子類具有不該有的方法。如果繼承鏈太長,那么任何一點小的變化都可能會引起一連串變化。因此,使用繼承時要注意控制繼承鏈的規(guī)模。1.繼承在Python中,繼承有以下特點。(1)在繼承中,基類初始化方法__init__()不會被自動調用。如果希望子類調用基類的__init__()方法,那么需要在子類的__init__()方法中顯式調用基類。(2)當調用基類的方法時,需要加上基類的類名前綴,且?guī)蟬elf參數(shù)變量。注意,在類中調用該類定義的方法時是不需要self參數(shù)的。(3)Python總是先查找對應類的方法,如果在子類中沒有對應的方法,那么Python才會在繼承鏈的基類中按順序查找。(4)在Python的繼承機制中,子類不能訪問基類的私有成員。1.繼承1.繼承利用繼承機制修改Cat類的代碼,添加繼承方法,代碼如下。>>>classCat:...def__init__(self):...='貓'...self.age=4...=[,self.age]...self.index=-1...defrun(self):...returnf"{}--在跑"...defgetName(self):...return...defgetAge(self):...returnself.age...def__iter__(self):...print('名字

年齡')...returnself...defnext(self):...ifself.index==len()-1:...raiseStopIteration...self.index+=1...return[self.index]1.繼承>>>classBosi(Cat):...defsetName(self,newName):...=newName...defeat(self):...returnf"{}--在吃">>>bs=Bosi()#創(chuàng)建對象>>>print('bs的名字為:',)#繼承父類的屬性和方法bs的名字為:貓>>>print('bs的年齡為:',bs.age)bs的年齡為:4>>>print(bs.run())貓--在跑>>>bs.setName('波斯貓')#子類的屬性和方法>>>print(bs.eat())波斯貓--在吃>>>iterator=iter(bs.next,1)#迭代輸出父類的屬性>>>forinfoiniterator:...print(info)貓4上述代碼定義了Bosi類的父類Cat,將貓共有的屬性和方法都放到父類中,子類僅需要向父類傳輸數(shù)據(jù)屬性。這樣可以很輕松地定義其他基于Cat類的子類。在Bosi類的__init__()方法中顯式調用了Cat類的__init__()方法,并向父類傳輸數(shù)據(jù),注意這里需要加self參數(shù)。因為在繼承中子類不能繼承父類的私有屬性,所以不用擔心父類和子類會出現(xiàn)因繼承造成的重名情況。子類不能繼承父類的私有屬性的代碼如下。1.繼承1.繼承>>>classanimal:...def__init__(self,age):...self.__age=age...defprint2(self):...print(self.__age)>>>classdog(animal):...def__init__(self,age):...animal.__init__(self,age)...defprint2(self):...print(self.__age)>>>a_animal=animal(10)>>>a_animal.print2()10>>>a_dog=dog(10)>>>a_dog.print2()#程序報錯AttributeError:'dog'objecthasnoattribute'_dog__age'2.多繼承>>>classA(object):#定義一個父類...def__init__(self):...print('->InputA')...print('<-OutputA')>>>classB(A):#定義子類B...def__init__(self):...print('-->InputB')...A.__init__(self)...print('<--OutputB')如果要繼承多個父類,那么父類名需要全部寫在括號里,這種情況稱為多繼承,格式為class子類名(父類名1,父類名2,···),示例代碼如下。>>>classC(A):#定義子類C...def__init__(self):...print('--->InputC')...A.__init__(self)...print('<---OutputC')>>>classD(B,C):#定義子類D...def__init__(self):...print('---->InputD')...B.__init__(self)...C.__init__(self)...print('<----OutputD')2.多繼承>>>d=D()#在Python中是可以有多繼承的,子類會繼承父類中的方法和屬性---->InputD-->InputB->InputA<-OutputA<--OutputB--->InputC->InputA<-OutputA<---OutputC<----OutputD>>>print(issubclass(C,B))#判斷一個類是不是另一個類的子類False>>>print(issubclass(C,A))True1其他方法目錄繼承父類屬性和方法2【任務6-4】創(chuàng)建Land_Rover子類3所謂重寫,就是子類中有一個和父類中名字相同的方法,子類中的方法會覆蓋父類中同名的方法,示例代碼如下。1.重寫>>>classCat:...defsayHello(self):...return'喵----1'>>>classBosi(Cat):...defsayHello(self):...return'喵喵----2'>>>bosi=Bosi()>>>print(bosi.sayHello())#子類中的方法會覆蓋父類中同名的方法喵喵----2封裝(encapsulation)就是將抽象得到的數(shù)據(jù)和行為(或功能)相結合,形成一個有機的整體(即類)。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),只需通過外部接口和特定的訪問權限去使用類即可。簡而言之,封裝就是將內容存儲到某個地方,需要時再去調用。2.封裝多態(tài)指面向對象程序執(zhí)行時,相同的信息可能會發(fā)送給多個不同類別的對象,系統(tǒng)依據(jù)對象所屬的類別,引發(fā)對應類別的方法而產(chǎn)生不同的行為。Python是動態(tài)語言,可以不檢查類型但成功調用實例方法,只要方法存在、屬性正確即可實現(xiàn)調用,這是Python語言與靜態(tài)語言(如Java)最大的差別之一。3.多態(tài)1其他方法目錄繼承父類屬性和方法2【任務6-4】創(chuàng)建Land_Rover子類3【任務6-4】創(chuàng)建Land_Rover子類任務分析任務描述在創(chuàng)建的Car類上,創(chuàng)建一個名為Land_Rover的子類,擁有兩個父類屬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論