版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python語(yǔ)言程序設(shè)計(jì)》項(xiàng)目九繼承與多態(tài)Contents繼承的概念和實(shí)現(xiàn)繼承的概念和實(shí)現(xiàn)super方法的使用isinstance、issubclass和type的使用什么是繼承PART01繼承和多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的另外兩個(gè)重要特性通過(guò)繼承,可以基于已有類(lèi)創(chuàng)建新的類(lèi),新類(lèi)除了繼承已有類(lèi)的所有屬性和方法,還可以根據(jù)需要增加新的屬性和方法。通過(guò)多態(tài),可以使得在執(zhí)行同一條語(yǔ)句時(shí),能夠根據(jù)實(shí)際使用的對(duì)象類(lèi)型決定調(diào)用哪個(gè)方法。繼承與多態(tài)繼承允許開(kāi)發(fā)者基于已有的類(lèi)創(chuàng)建新的類(lèi)如果一個(gè)類(lèi)C1通過(guò)繼承已有類(lèi)C而創(chuàng)建,則將C1稱(chēng)作子類(lèi)(subclass),將C稱(chēng)做基類(lèi)、父類(lèi)或超類(lèi)(baseclass、superclass)。子類(lèi)會(huì)繼承父類(lèi)中定義的所有屬性和方法,另外也能夠在父類(lèi)中增加新的屬性和方法。如果一個(gè)子類(lèi)只有一個(gè)父類(lèi),則將這種繼承關(guān)系稱(chēng)為單繼承如果一個(gè)子類(lèi)有兩個(gè)或更多父類(lèi),則將這種繼承關(guān)系稱(chēng)為多重繼承。什么是繼承類(lèi)的繼承關(guān)系示例單繼承:父類(lèi)Person,子類(lèi)Student和Teacher多重繼承:父類(lèi)Student和Teacher,子類(lèi)TA子類(lèi)繼承父類(lèi)的屬性和方法子類(lèi)可以增加新的屬性和方法,對(duì)方法重新定義什么是繼承如何繼承父類(lèi)PART02class子類(lèi)名(父類(lèi)名1,父類(lèi)名2,…,父類(lèi)名M):
語(yǔ)句1語(yǔ)句2…
語(yǔ)句N(xiāo)定義子類(lèi)時(shí)需要指定父類(lèi),其語(yǔ)法格式為:當(dāng)M等于1時(shí),則為單繼承;當(dāng)M大于1時(shí),則為多重繼承。如何繼承父類(lèi)如何繼承父類(lèi)【任務(wù)描述】了解如何繼承父類(lèi)【關(guān)鍵步驟】了解如何繼承父類(lèi)示例011 classPerson:#定義Person類(lèi)2 defSetName(self,name):#定義SetName方法3 =name#將self對(duì)應(yīng)對(duì)象的name屬性賦為形參name的值
4 classStudent(Person):#以Person類(lèi)作為父類(lèi)定義子類(lèi)Student5 defSetSno(self,sno):#定義SetSno方法6 self.sno=sno#將self對(duì)應(yīng)對(duì)象的sno屬性賦為形參sno的值7 classTeacher(Person):#以Person類(lèi)作為父類(lèi)定義子類(lèi)Teacher8 defSetTno(self,tno):#定義SetTno方法9 self.tno=tno#將self對(duì)應(yīng)對(duì)象的tno屬性賦為形參tno的值10 classTA(Student,Teacher):#以Student類(lèi)和Teacher類(lèi)作為父類(lèi)定義子類(lèi)TA11 defSetTeacher(self,teacher):#定義SetTeacher方法12 self.teacher=teacher#將self對(duì)象的teacher屬性賦為形參teacher的值如何繼承父類(lèi)13 if__name__=='__main__':14 stu=Student()#定義Student類(lèi)對(duì)象stu15 stu.SetSno('1810100')#調(diào)用Student類(lèi)中定義的SetSno方法16 stu.SetName('李曉明')#調(diào)用Student類(lèi)從Person類(lèi)繼承過(guò)來(lái)的SetName方法17 print('學(xué)號(hào):%s,姓名:%s'%(stu.sno,))#輸出學(xué)號(hào)和姓名18 t=Teacher()#定義Teacher類(lèi)對(duì)象t19 t.SetTno('998012')#調(diào)用Teacher類(lèi)中定義的SetTno方法20 t.SetName('馬紅')#調(diào)用Teacher類(lèi)從Person類(lèi)繼承過(guò)來(lái)的SetName方法21 print('教工號(hào):%s,姓名:%s'%(t.tno,))#輸出教工號(hào)和姓名22 ta=TA()#定義TA類(lèi)對(duì)象t23 ta.SetSno('1600125')#調(diào)用Student類(lèi)中定義的SetSno方法24 ta.SetTno('T18005')#調(diào)用Teacher類(lèi)中定義的SetTno方法25 ta.SetName('張剛')#調(diào)用Person類(lèi)中定義的SetName方法26 ta.SetTeacher('馬紅')#調(diào)用TA類(lèi)中定義的SetTeacher方法25 print('學(xué)號(hào):%s,教工號(hào):%s,姓名:%s,主講教師:%s'%(ta.sno,ta.tno,,ta.teacher))如何繼承父類(lèi)示例01學(xué)號(hào):1810100,姓名:李曉明教工號(hào):998012,姓名:馬紅學(xué)號(hào):1600125,教工號(hào):T18005,姓名:張剛,主講教師:馬紅程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:如何繼承父類(lèi)示例01方法重寫(xiě)PART03方法重寫(xiě)【任務(wù)描述】了解如何繼承父類(lèi)【關(guān)鍵步驟】了解如何繼承父類(lèi)示例021 classPerson:#定義Person類(lèi)2 def__init__(self,name):#定義構(gòu)造方法3 =name#將self對(duì)象的name屬性賦為形參name的值4 defPrintInfo(self):#定義PrintInfo方法5 print('姓名:%s'%)6 classStudent(Person):#以Person類(lèi)作為父類(lèi)定義子類(lèi)Student7 def__init__(self,sno,name):#定義構(gòu)造方法8 self.sno=sno#將self對(duì)象的sno屬性賦為形參sno的值9 =name#將self對(duì)象的name屬性賦為形參name的值10 defPrintInfo(self):#定義PrintInfo方法11 print('學(xué)號(hào):%s,姓名:%s'%(self.sno,))12 defPrintPersonInfo(person):#定義普通函數(shù)PrintPersonInfo13 print('PrintPersonInfo函數(shù)中的輸出結(jié)果',end='#')14 person.PrintInfo()#通過(guò)person調(diào)用PrintInfo方法方法重寫(xiě)是指子類(lèi)可以對(duì)從父類(lèi)中繼承過(guò)來(lái)的方法進(jìn)行重新定義,使得子類(lèi)對(duì)象可以表現(xiàn)出與父類(lèi)對(duì)象不同的行為。方法重寫(xiě)示例0215 if__name__=='__main__':16 p=Person('李曉明')#創(chuàng)建Person類(lèi)對(duì)象p17 stu=Student('1810100','李曉明')#創(chuàng)建Student類(lèi)對(duì)象stu18 p.PrintInfo()19 stu.PrintInfo()20 PrintPersonInfo(p)21 PrintPersonInfo(stu)姓名:李曉明學(xué)號(hào):1810100,姓名:李曉明PrintPersonInfo函數(shù)中的輸出結(jié)果#姓名:李曉明PrintPersonInfo函數(shù)中的輸出結(jié)果#學(xué)號(hào):1810100,姓名:李曉明程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:方法重寫(xiě)示例02super方法PART04super([類(lèi)名[,對(duì)象名或類(lèi)名]])super方法用于獲取父類(lèi)的代理對(duì)象,以執(zhí)行已在子類(lèi)中被重寫(xiě)的父類(lèi)方法,其語(yǔ)法格式為:super方法有兩個(gè)參數(shù):第一個(gè)參數(shù)是要獲取父類(lèi)代理對(duì)象的類(lèi)名。第二個(gè)參數(shù)如果傳入對(duì)象名,則該對(duì)象所屬的類(lèi)必須是第一個(gè)參數(shù)指定的類(lèi)或該類(lèi)的子類(lèi),找到的父類(lèi)對(duì)象的self會(huì)綁定到這個(gè)對(duì)象上;如果傳入類(lèi)名,則該類(lèi)必須是第一個(gè)參數(shù)指定的類(lèi)的子類(lèi)。在一個(gè)類(lèi)A的定義中調(diào)用super方法時(shí),可以將兩個(gè)參數(shù)都省略,此時(shí),super()等價(jià)于super(A,self),即獲取A的父類(lèi)代理對(duì)象,且獲取到的父類(lèi)代理對(duì)象中的self綁定到當(dāng)前A類(lèi)對(duì)象的self上。super方法super方法【任務(wù)描述】了解super方法的用途【關(guān)鍵步驟】了解super方法的用途示例031 classPerson:#定義Person類(lèi)2 def__init__(self,name):#定義構(gòu)造方法3 print('Person類(lèi)構(gòu)造方法被調(diào)用!')4 =name#將self對(duì)象的name屬性賦為形參name的值5 classStudent(Person):#以Person類(lèi)作為父類(lèi)定義子類(lèi)Student6 def__init__(self,sno,name):#定義構(gòu)造方法7 print('Student類(lèi)構(gòu)造方法被調(diào)用!')8 super().__init__(name)#調(diào)用父類(lèi)的構(gòu)造方法9 self.sno=sno#將self對(duì)象的sno屬性賦為形參sno的值10 classPostgraduate(Student):#以Student類(lèi)作為父類(lèi)定義子類(lèi)Postgraduate11 def__init__(self,sno,name,tutor):#定義構(gòu)造方法12 print('Postgraduate類(lèi)構(gòu)造方法被調(diào)用!')13 super().__init__(sno,name)#調(diào)用父類(lèi)的構(gòu)造方法14 self.tutor=tutor#將self對(duì)象的tutor屬性賦為形參tutor的值15 if__name__=='__main__':16 pg=Postgraduate('1810100','李曉明','馬紅')#創(chuàng)建Postgraduate類(lèi)對(duì)象pg17 print('學(xué)號(hào):%s,姓名:%s,導(dǎo)師:%s'%(pg.sno,,pg.tutor))super方法使用示例super方法示例03Postgraduate類(lèi)構(gòu)造方法被調(diào)用!Student類(lèi)構(gòu)造方法被調(diào)用!Person類(lèi)構(gòu)造方法被調(diào)用!學(xué)號(hào):1810100,姓名:李曉明,導(dǎo)師:馬紅程序執(zhí)行完畢后,將在屏幕上輸出如下結(jié)果:super方法示例03isinstance、issubclass和typePART05isinstance用于判斷一個(gè)對(duì)象所屬的類(lèi)是否是指定類(lèi)或指定類(lèi)的子類(lèi);issubclass用于判斷一個(gè)類(lèi)是否是另一個(gè)類(lèi)的子類(lèi);type用于獲取一個(gè)對(duì)象所屬的類(lèi)。內(nèi)置函數(shù)isinstance、issubclass和typeisinstance、issubclass和type【任務(wù)描述】了解isinstance、issubclass和type方法的用途【關(guān)鍵步驟】了解isinstance、issubclass和type方法的用途示例041 classPerson:#定義Person類(lèi)2 pass3 classStudent(Person):#以Person類(lèi)作為父類(lèi)定義子類(lèi)Student4 pass5 classFlower:#定義Flower類(lèi)6 pass7 if__name__=='__main__':8 stu=Student()#創(chuàng)建Student類(lèi)對(duì)象stu9 f=Flower()#創(chuàng)建Flower對(duì)象f10 print('stu是Person類(lèi)或其子類(lèi)對(duì)象:',isinstance(stu,Person))11 print('stu是Student類(lèi)或其子類(lèi)對(duì)象:',isinstance(stu,Student))12 print('f是Person類(lèi)或其子類(lèi)對(duì)象:',isinstance(f,Person))13 print('Student是Person類(lèi)的子類(lèi):',issubclass(Student,Person))14 print('Flower是Person類(lèi)的子類(lèi):',issubclass(Flower,Person))15 print('stu對(duì)象所屬的類(lèi):',type(stu))16 print('f對(duì)象所屬的類(lèi):',type(f))17 print('stu是Person類(lèi)對(duì)象:',type(stu)==Person)18 print('stu是Student類(lèi)對(duì)象:',type(stu)==Student)isinstance、issubclass和type示例04stu是Person類(lèi)或其子類(lèi)對(duì)象:Truestu是Student類(lèi)或其子類(lèi)對(duì)象:Truef是Person類(lèi)或其子類(lèi)對(duì)象:FalseStudent是Person類(lèi)的子類(lèi):TrueFlower是Person類(lèi)的子類(lèi):False
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度模特時(shí)尚品牌代言聘用合同-@-15
- 2025年度事業(yè)單位網(wǎng)絡(luò)安全管理員勞動(dòng)合同范本3篇
- 二零二五年度內(nèi)墻涂料研發(fā)生產(chǎn)與品牌營(yíng)銷(xiāo)承包合同
- 2025年度智能晾曬系統(tǒng)配套個(gè)人木工裝修合同3篇
- 2025年度個(gè)人閑置物品轉(zhuǎn)讓合同范本3篇
- 2025年度個(gè)人投資理財(cái)咨詢服務(wù)合同范本8篇
- 2025年度個(gè)人住房貸款質(zhì)押合同標(biāo)準(zhǔn)文本及貸款逾期處理規(guī)定3篇
- 2025年度個(gè)人房地產(chǎn)抵押借款合同電子簽名版
- 二零二五年度農(nóng)家樂(lè)民宿設(shè)施使用權(quán)轉(zhuǎn)讓合同4篇
- 2025年度個(gè)人股權(quán)收購(gòu)與轉(zhuǎn)讓合同(資產(chǎn)重組版)3篇
- 射頻在疼痛治療中的應(yīng)用
- 和平精英電競(jìng)賽事
- 四年級(jí)數(shù)學(xué)豎式計(jì)算100道文檔
- “新零售”模式下生鮮電商的營(yíng)銷(xiāo)策略研究-以盒馬鮮生為例
- 項(xiàng)痹病辨證施護(hù)
- 職業(yè)安全健康工作總結(jié)(2篇)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來(lái)投資可行性研究報(bào)告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會(huì)
- 彈簧分離問(wèn)題經(jīng)典題目
- 部編版高中歷史中外歷史綱要(下)世界史導(dǎo)言課課件
評(píng)論
0/150
提交評(píng)論