![小學課后服務 Python少兒編程 進階篇:9-面向對象編程進階 課件_第1頁](http://file4.renrendoc.com/view14/M06/3E/09/wKhkGWbm5UaAZHwNAADMVhp-oAU590.jpg)
![小學課后服務 Python少兒編程 進階篇:9-面向對象編程進階 課件_第2頁](http://file4.renrendoc.com/view14/M06/3E/09/wKhkGWbm5UaAZHwNAADMVhp-oAU5902.jpg)
![小學課后服務 Python少兒編程 進階篇:9-面向對象編程進階 課件_第3頁](http://file4.renrendoc.com/view14/M06/3E/09/wKhkGWbm5UaAZHwNAADMVhp-oAU5903.jpg)
![小學課后服務 Python少兒編程 進階篇:9-面向對象編程進階 課件_第4頁](http://file4.renrendoc.com/view14/M06/3E/09/wKhkGWbm5UaAZHwNAADMVhp-oAU5904.jpg)
![小學課后服務 Python少兒編程 進階篇:9-面向對象編程進階 課件_第5頁](http://file4.renrendoc.com/view14/M06/3E/09/wKhkGWbm5UaAZHwNAADMVhp-oAU5905.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課面向對象編程進階這一節(jié),我們學習面向對象的三大特征:封裝、繼承和多態(tài)封裝繼承多態(tài)面向對象三大特征之封裝什么是封裝呢?我們用前面Orc類來說:classOrc:
def__init__(self,name,hp,lv):
self.name=name
self.hp=hp
self.lv=lv
defdesc(self):
print('我是%s,血量為:%s,等級為:%s'%(self.name,self.hp,self.lv))
orc=Orc('史瑞克',200,2)
orc.desc()
在面向對象的編程思想中,將屬性和方法隱藏在類中的行為,就稱為封裝。屬性和方法通過對象調(diào)用,對于調(diào)用者來說,隱藏了具體的實現(xiàn)細節(jié)。封裝除了隱藏細節(jié)外,還有另一個目的:數(shù)據(jù)的安全就像機箱的目的是為了保護電腦內(nèi)部的主板、硬盤、處理器、電源等那么對于當前的Orc類來說,如何保證內(nèi)部屬性數(shù)據(jù)的安全呢?classOrc:
def__init__(self,name,hp,lv):
self.name=name
self.hp=hp
self.lv=lv
defdesc(self):
print('我是%s,血量為:%s,等級為:%s'%(self.name,self.hp,self.lv))
orc=Orc('史瑞克',200,2)#語法上沒問題,但是不符合實際情況!
orc.hp=-200
orc.desc()
這就好比,如何能保證電腦內(nèi)部硬盤的安全,同時又能夠讓外部能夠訪問到硬盤對于電腦來說是機箱+USB接口,對于類來說,是私有+getter/setter1屬性前加上__,就變成了了私有屬性classOrc:
def__init__(self,name,hp,lv):
self.__name=name
self.__hp=hp
self.__lv=lv
defdesc(self):
print('我是%s,血量為:%s,等級為:%s'%
(self.__name,self.__hp,self.__lv))
orc=Orc('史瑞克',200,2)
orc.desc()#此時打印,會報錯
print(orc.__hp)Traceback(mostrecentcalllast):File"C:/…/demo01.py",line13,in<module>print(orc.__hp)AttributeError:'Orc'objecthasnoattribute'__hp'此時運行(類外部訪問),就會報錯2外部如何訪問屬性呢?比如獲取當前的血量classOrc:
def__init__(self,name,hp,lv):
self.__name=name
self.__hp=hp
self.__lv=lv
defdesc(self):
print(‘我是%s,血量為:%s,等級為:%s’%
(self.__name,self.__hp,self.__lv))
#get方法
defget_hp(self):
returnself.__hp
orc=Orc('史瑞克',200,2)
orc.desc()#get方法的使用
print(orc.get_hp())這就是所謂的屬性的getter方法那又該如何在外部修改屬性的值呢?比如血量減少之后hp的重新賦值3這就是和getter對應的setter方法,類定義如下:外部訪問過程如下:classOrc:
def__init__(self,name,hp,lv):
self.__name=name
self.__hp=hp
self.__lv=lv
defdesc(self):
print('我是%s,血量為:%s,等級為:%s'%
(self.__name,self.__hp,self.__lv))
defget_hp(self):
returnself.__hp
defset_hp(self,hp):
self.__hp=hp
orc=Orc('史瑞克',200,2)
orc.desc()
#模擬orc這個對象減少了50點血
orc.set_hp(150)
orc.desc()
print(orc.get_hp())我是史瑞克,血量為:200,等級為:2我是史瑞克,血量為:150,等級為:2150輸出結果為:思考:使用私有+getter/setter為什么解決數(shù)據(jù)安全的問題?為什么說私有+getter/setter就解決了數(shù)據(jù)的安全(臟數(shù)據(jù))問題呢?關鍵在setter方法上,在該方法中,我們可以做任何的處理,比如對hp小于0的賦值都置為0:classOrc:
……
defset_hp(self,hp):
ifhp<0:
self.__hp=0
else:
self.__hp=hp
orc=Orc('史瑞克',200,2)
orc.desc()
#模擬orc這個對象減少了50點血
orc.set_hp(-150)
orc.desc()
print(orc.get_hp())
我是史瑞克,血量為:200,等級為:2我是史瑞克,血量為:0,等級為:20運行結果為:三大特征之繼承現(xiàn)在假設我們做一個學校管理系統(tǒng),那么就可能會要新建兩個類1教師類,屬性有:姓名、年齡、職位等2學生類,屬性有:姓名、年齡、專業(yè)等classTeacher:
def__init__(self,name,age,position):
self.__name=name
self.__age=age
self.__position=position
defdesc(self):
print('大家好,我是一名教師,'
'我叫%s,今年%s歲,目前職位為:%s'%
(self.__name,self.__age,self.__position))
defget_name(self):
returnself.__name
defget_age(self):
returnself.__age
defget_position(self):
returnself.__position
defset_name(self,name):
self.__name=name
defset_age(self,age):
self.__age=age
defset_position(self,position):
self.__position=positionclassStudent:
def__init__(self,name,age,major):
self.__name=name
self.__age=age
self.__major=major
defdesc(self):
print('大家好,我是一名學生,'
'我叫%s,今年%s歲,在讀專業(yè)為:%s'%
(self.__name,self.__age,self.__major))
defget_name(self):
returnself.__name
defget_age(self):
returnself.__age
defget_major(self):
returnself.__major
defset_name(self,name):
self.__name=name
defset_age(self,age):
self.__age=age
defset_major(self,major):
self.__major=major可以發(fā)現(xiàn)這兩個類中有很多重復的地方,比如name和age屬性及其get/set方法agenameposition教師類agenamemajor學生類agenamepositionmajor教師類學生類把共同部分提取出來這樣有什么好處呢?代碼進行了復用!agenamepositionmajoragenameposition教師類agenamemajor學生類agenamedept后勤人員類dept父類子類實際子類下面我們來看下Python中繼承的寫法,還以教師類和學生類來說:1定義父類,包含name和age屬性2定義Teacher類,繼承Person類classPerson:
def__init__(self,name,age):
self.__name=name
self.__age=age
defdesc(self):
print('我是父類,姓名:%s,年齡:%s'%(self.__name,self.__age))
classTeacher(Person):
def__init__(self,name,age,position): #super():用于調(diào)用父類的方法
super().__init__(name,age)
self.__position=position
teacher=Teacher('張三',20,'aaa')
teacher.desc()這樣,屬性和方法都繼承了過來練習Exercises密封線內(nèi)不準答題編寫Student類,繼承自Person類三大特征之多態(tài)現(xiàn)在,我們用上一步的Person、Teacher和Student來看下什么是多態(tài)2使用teacher對象調(diào)用desc(),1在Person中提供name和age的getter/setterclassTeacher(Person):
def__init__(self,name,age,position): #super():用于調(diào)用父類的方法
super().__init__(name,age)
self.__position=position
teacher=Teacher('張三',20,'aaa')
teacher.desc()這樣輸出的是父類的desc()3在Teacher類中添加desc方法,類似如下:defdesc(self):
print('我是一名教師,名字:'
'%s,年齡:%s,職位:%s'
%(super().get_name(),super().get_age(),self.__position))練習Exercises密封線內(nèi)不準答題添加Student類中的desc()方法,注意super()的使用!現(xiàn)在,讓我們再次來運行teacher或student對象的desc()方法,以teacher為例:代碼為:teacher=Teacher('張三',20,'教研組長')
teacher.desc()運行結果為:我是一名教師,名字:張三,年齡:20,職位:教研組長也即是說,子類的desc方法覆蓋了父類的desc方法,當調(diào)用的時候,調(diào)用的是子類的方法,這就叫多態(tài)這個該如何去理解呢?舉個例子,下面的圖片,都是鳥用面向對象的思想來看
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衡陽2025年湖南衡陽市中心醫(yī)院高層次和急需緊缺專業(yè)技術人才引進60人筆試歷年參考題庫附帶答案詳解
- 漯河2024年河南漯河市教育局所屬事業(yè)單位人才引進筆試歷年參考題庫附帶答案詳解
- 深圳2025年廣東深圳博物館勞務派遣工作人員招聘6人筆試歷年參考題庫附帶答案詳解
- 2025屆湘豫名校聯(lián)考高三上學期一輪復習質量檢測物理試卷
- 2025年中國制證系統(tǒng)市場調(diào)查研究報告
- 2025至2031年中國高速曬圖機行業(yè)投資前景及策略咨詢研究報告
- 2025年花色電腦威爾頓羊毛地毯項目可行性研究報告
- 2025年紙制包裝品項目可行性研究報告
- 2025至2031年中國石墨-鐵基粉末冶金制品行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國煙堿原液行業(yè)投資前景及策略咨詢研究報告
- 酒店長包房租賃協(xié)議書范本
- 2 找春天 公開課一等獎創(chuàng)新教學設計
- 2025年江蘇護理職業(yè)學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年江蘇南京水務集團有限公司招聘筆試參考題庫含答案解析
- 【道法】開學第一課 課件-2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 建筑工程施工安全管理課件
- 2025年春新外研版(三起)英語三年級下冊課件 Unit2第1課時Startup
- 人教版(2024)英語七年級上冊單詞表
- 2024年江西電力職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 【真題】2023年常州市中考道德與法治試卷(含答案解析)
- 超星爾雅學習通《大學生心理健康教育(蘭州大學版)》章節(jié)測試含答案
評論
0/150
提交評論