Python程序設計基礎項目化教程 課件 項目九 繼承與多態(tài)_第1頁
Python程序設計基礎項目化教程 課件 項目九 繼承與多態(tài)_第2頁
Python程序設計基礎項目化教程 課件 項目九 繼承與多態(tài)_第3頁
Python程序設計基礎項目化教程 課件 項目九 繼承與多態(tài)_第4頁
Python程序設計基礎項目化教程 課件 項目九 繼承與多態(tài)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《Python語言程序設計》項目九繼承與多態(tài)Contents繼承的概念和實現(xiàn)繼承的概念和實現(xiàn)super方法的使用isinstance、issubclass和type的使用什么是繼承PART01繼承和多態(tài)是面向?qū)ο蟪绦蛟O計的另外兩個重要特性通過繼承,可以基于已有類創(chuàng)建新的類,新類除了繼承已有類的所有屬性和方法,還可以根據(jù)需要增加新的屬性和方法。通過多態(tài),可以使得在執(zhí)行同一條語句時,能夠根據(jù)實際使用的對象類型決定調(diào)用哪個方法。繼承與多態(tài)繼承允許開發(fā)者基于已有的類創(chuàng)建新的類如果一個類C1通過繼承已有類C而創(chuàng)建,則將C1稱作子類(subclass),將C稱做基類、父類或超類(baseclass、superclass)。子類會繼承父類中定義的所有屬性和方法,另外也能夠在父類中增加新的屬性和方法。如果一個子類只有一個父類,則將這種繼承關系稱為單繼承如果一個子類有兩個或更多父類,則將這種繼承關系稱為多重繼承。什么是繼承類的繼承關系示例單繼承:父類Person,子類Student和Teacher多重繼承:父類Student和Teacher,子類TA子類繼承父類的屬性和方法子類可以增加新的屬性和方法,對方法重新定義什么是繼承如何繼承父類PART02class子類名(父類名1,父類名2,…,父類名M):

語句1語句2…

語句N定義子類時需要指定父類,其語法格式為:當M等于1時,則為單繼承;當M大于1時,則為多重繼承。如何繼承父類如何繼承父類【任務描述】了解如何繼承父類【關鍵步驟】了解如何繼承父類示例011 classPerson:#定義Person類2 defSetName(self,name):#定義SetName方法3 =name#將self對應對象的name屬性賦為形參name的值

4 classStudent(Person):#以Person類作為父類定義子類Student5 defSetSno(self,sno):#定義SetSno方法6 self.sno=sno#將self對應對象的sno屬性賦為形參sno的值7 classTeacher(Person):#以Person類作為父類定義子類Teacher8 defSetTno(self,tno):#定義SetTno方法9 self.tno=tno#將self對應對象的tno屬性賦為形參tno的值10 classTA(Student,Teacher):#以Student類和Teacher類作為父類定義子類TA11 defSetTeacher(self,teacher):#定義SetTeacher方法12 self.teacher=teacher#將self對象的teacher屬性賦為形參teacher的值如何繼承父類13 if__name__=='__main__':14 stu=Student()#定義Student類對象stu15 stu.SetSno('1810100')#調(diào)用Student類中定義的SetSno方法16 stu.SetName('李曉明')#調(diào)用Student類從Person類繼承過來的SetName方法17 print('學號:%s,姓名:%s'%(stu.sno,))#輸出學號和姓名18 t=Teacher()#定義Teacher類對象t19 t.SetTno('998012')#調(diào)用Teacher類中定義的SetTno方法20 t.SetName('馬紅')#調(diào)用Teacher類從Person類繼承過來的SetName方法21 print('教工號:%s,姓名:%s'%(t.tno,))#輸出教工號和姓名22 ta=TA()#定義TA類對象t23 ta.SetSno('1600125')#調(diào)用Student類中定義的SetSno方法24 ta.SetTno('T18005')#調(diào)用Teacher類中定義的SetTno方法25 ta.SetName('張剛')#調(diào)用Person類中定義的SetName方法26 ta.SetTeacher('馬紅')#調(diào)用TA類中定義的SetTeacher方法25 print('學號:%s,教工號:%s,姓名:%s,主講教師:%s'%(ta.sno,ta.tno,,ta.teacher))如何繼承父類示例01學號:1810100,姓名:李曉明教工號:998012,姓名:馬紅學號:1600125,教工號:T18005,姓名:張剛,主講教師:馬紅程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:如何繼承父類示例01方法重寫PART03方法重寫【任務描述】了解如何繼承父類【關鍵步驟】了解如何繼承父類示例021 classPerson:#定義Person類2 def__init__(self,name):#定義構(gòu)造方法3 =name#將self對象的name屬性賦為形參name的值4 defPrintInfo(self):#定義PrintInfo方法5 print('姓名:%s'%)6 classStudent(Person):#以Person類作為父類定義子類Student7 def__init__(self,sno,name):#定義構(gòu)造方法8 self.sno=sno#將self對象的sno屬性賦為形參sno的值9 =name#將self對象的name屬性賦為形參name的值10 defPrintInfo(self):#定義PrintInfo方法11 print('學號:%s,姓名:%s'%(self.sno,))12 defPrintPersonInfo(person):#定義普通函數(shù)PrintPersonInfo13 print('PrintPersonInfo函數(shù)中的輸出結(jié)果',end='#')14 person.PrintInfo()#通過person調(diào)用PrintInfo方法方法重寫是指子類可以對從父類中繼承過來的方法進行重新定義,使得子類對象可以表現(xiàn)出與父類對象不同的行為。方法重寫示例0215 if__name__=='__main__':16 p=Person('李曉明')#創(chuàng)建Person類對象p17 stu=Student('1810100','李曉明')#創(chuàng)建Student類對象stu18 p.PrintInfo()19 stu.PrintInfo()20 PrintPersonInfo(p)21 PrintPersonInfo(stu)姓名:李曉明學號:1810100,姓名:李曉明PrintPersonInfo函數(shù)中的輸出結(jié)果#姓名:李曉明PrintPersonInfo函數(shù)中的輸出結(jié)果#學號:1810100,姓名:李曉明程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:方法重寫示例02super方法PART04super([類名[,對象名或類名]])super方法用于獲取父類的代理對象,以執(zhí)行已在子類中被重寫的父類方法,其語法格式為:super方法有兩個參數(shù):第一個參數(shù)是要獲取父類代理對象的類名。第二個參數(shù)如果傳入對象名,則該對象所屬的類必須是第一個參數(shù)指定的類或該類的子類,找到的父類對象的self會綁定到這個對象上;如果傳入類名,則該類必須是第一個參數(shù)指定的類的子類。在一個類A的定義中調(diào)用super方法時,可以將兩個參數(shù)都省略,此時,super()等價于super(A,self),即獲取A的父類代理對象,且獲取到的父類代理對象中的self綁定到當前A類對象的self上。super方法super方法【任務描述】了解super方法的用途【關鍵步驟】了解super方法的用途示例031 classPerson:#定義Person類2 def__init__(self,name):#定義構(gòu)造方法3 print('Person類構(gòu)造方法被調(diào)用!')4 =name#將self對象的name屬性賦為形參name的值5 classStudent(Person):#以Person類作為父類定義子類Student6 def__init__(self,sno,name):#定義構(gòu)造方法7 print('Student類構(gòu)造方法被調(diào)用!')8 super().__init__(name)#調(diào)用父類的構(gòu)造方法9 self.sno=sno#將self對象的sno屬性賦為形參sno的值10 classPostgraduate(Student):#以Student類作為父類定義子類Postgraduate11 def__init__(self,sno,name,tutor):#定義構(gòu)造方法12 print('Postgraduate類構(gòu)造方法被調(diào)用!')13 super().__init__(sno,name)#調(diào)用父類的構(gòu)造方法14 self.tutor=tutor#將self對象的tutor屬性賦為形參tutor的值15 if__name__=='__main__':16 pg=Postgraduate('1810100','李曉明','馬紅')#創(chuàng)建Postgraduate類對象pg17 print('學號:%s,姓名:%s,導師:%s'%(pg.sno,,pg.tutor))super方法使用示例super方法示例03Postgraduate類構(gòu)造方法被調(diào)用!Student類構(gòu)造方法被調(diào)用!Person類構(gòu)造方法被調(diào)用!學號:1810100,姓名:李曉明,導師:馬紅程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:super方法示例03isinstance、issubclass和typePART05isinstance用于判斷一個對象所屬的類是否是指定類或指定類的子類;issubclass用于判斷一個類是否是另一個類的子類;type用于獲取一個對象所屬的類。內(nèi)置函數(shù)isinstance、issubclass和typeisinstance、issubclass和type【任務描述】了解isinstance、issubclass和type方法的用途【關鍵步驟】了解isinstance、issubclass和type方法的用途示例041 classPerson:#定義Person類2 pass3 classStudent(Person):#以Person類作為父類定義子類Student4 pass5 classFlower:#定義Flower類6 pass7 if__name__=='__main__':8 stu=Student()#創(chuàng)建Student類對象stu9 f=Flower()#創(chuàng)建Flower對象f10 print('stu是Person類或其子類對象:',isinstance(stu,Person))11 print('stu是Student類或其子類對象:',isinstance(stu,Student))12 print('f是Person類或其子類對象:',isinstance(f,Person))13 print('Student是Person類的子類:',issubclass(Student,Person))14 print('Flower是Person類的子類:',issubclass(Flower,Person))15 print('stu對象所屬的類:',type(stu))16 print('f對象所屬的類:',type(f))17 print('stu是Person類對象:',type(stu)==Person)18 print('stu是Student類對象:',type(stu)==Student)isinstance、issubclass和type示例04stu是Person類或其子類對象:Truestu是Student類或其子類對象:Truef是Person類或其子類對象:FalseStudent是Person類的子類:TrueFlower是Person類的子類:False

溫馨提示

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

評論

0/150

提交評論