




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課面向?qū)ο缶幊踢M(jìn)階這一節(jié),我們學(xué)習(xí)面向?qū)ο蟮娜筇卣鳎悍庋b、繼承和多態(tài)封裝繼承多態(tài)面向?qū)ο笕筇卣髦庋b什么是封裝呢?我們用前面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()
在面向?qū)ο蟮木幊趟枷胫?,將屬性和方法隱藏在類中的行為,就稱為封裝。屬性和方法通過對象調(diào)用,對于調(diào)用者來說,隱藏了具體的實(shí)現(xiàn)細(xì)節(jié)。封裝除了隱藏細(xì)節(jié)外,還有另一個(gè)目的:數(shù)據(jù)的安全就像機(jī)箱的目的是為了保護(hù)電腦內(nèi)部的主板、硬盤、處理器、電源等那么對于當(dāng)前的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)#語法上沒問題,但是不符合實(shí)際情況!
orc.hp=-200
orc.desc()
這就好比,如何能保證電腦內(nèi)部硬盤的安全,同時(shí)又能夠讓外部能夠訪問到硬盤對于電腦來說是機(jī)箱+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()#此時(shí)打印,會報(bào)錯(cuò)
print(orc.__hp)Traceback(mostrecentcalllast):File"C:/…/demo01.py",line13,in<module>print(orc.__hp)AttributeError:'Orc'objecthasnoattribute'__hp'此時(shí)運(yùn)行(類外部訪問),就會報(bào)錯(cuò)2外部如何訪問屬性呢?比如獲取當(dāng)前的血量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對應(yīng)的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這個(gè)對象減少了50點(diǎn)血
orc.set_hp(150)
orc.desc()
print(orc.get_hp())我是史瑞克,血量為:200,等級為:2我是史瑞克,血量為:150,等級為:2150輸出結(jié)果為:思考:使用私有+getter/setter為什么解決數(shù)據(jù)安全的問題?為什么說私有+getter/setter就解決了數(shù)據(jù)的安全(臟數(shù)據(jù))問題呢?關(guān)鍵在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這個(gè)對象減少了50點(diǎn)血
orc.set_hp(-150)
orc.desc()
print(orc.get_hp())
我是史瑞克,血量為:200,等級為:2我是史瑞克,血量為:0,等級為:20運(yùn)行結(jié)果為:三大特征之繼承現(xiàn)在假設(shè)我們做一個(gè)學(xué)校管理系統(tǒng),那么就可能會要新建兩個(gè)類1教師類,屬性有:姓名、年齡、職位等2學(xué)生類,屬性有:姓名、年齡、專業(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('大家好,我是一名學(xué)生,'
'我叫%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)這兩個(gè)類中有很多重復(fù)的地方,比如name和age屬性及其get/set方法agenameposition教師類agenamemajor學(xué)生類agenamepositionmajor教師類學(xué)生類把共同部分提取出來這樣有什么好處呢?代碼進(jìn)行了復(fù)用!agenamepositionmajoragenameposition教師類agenamemajor學(xué)生類agenamedept后勤人員類dept父類子類實(shí)際子類下面我們來看下Python中繼承的寫法,還以教師類和學(xué)生類來說: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()這樣,屬性和方法都繼承了過來練習(xí)Exercises密封線內(nèi)不準(zhǔn)答題編寫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))練習(xí)Exercises密封線內(nèi)不準(zhǔn)答題添加Student類中的desc()方法,注意super()的使用!現(xiàn)在,讓我們再次來運(yùn)行teacher或student對象的desc()方法,以teacher為例:代碼為:teacher=Teacher('張三',20,'教研組長')
teacher.desc()運(yùn)行結(jié)果為:我是一名教師,名字:張三,年齡:20,職位:教研組長也即是說,子類的desc方法覆蓋了父類的desc方法,當(dāng)調(diào)用的時(shí)候,調(diào)用的是子類的方法,這就叫多態(tài)這個(gè)該如何去理解呢?舉個(gè)例子,下面的圖片,都是鳥用面向?qū)ο蟮乃枷雭砜?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025財(cái)務(wù)審計(jì)業(yè)務(wù)合同書范本
- 2025標(biāo)準(zhǔn)企業(yè)辦公室租賃合同樣本下載
- 個(gè)人餐飲員工勞動(dòng)合同標(biāo)準(zhǔn)文本
- 書法雕刻勞務(wù)合同標(biāo)準(zhǔn)文本
- 航空運(yùn)輸合同示范文本二零二五年
- 二零二五版珠海二手房買賣合同
- 證券資產(chǎn)抵押擔(dān)保合同二零二五年
- 聘用人才勞動(dòng)合同
- 二零二五版員工食堂勞務(wù)承包合同
- 建設(shè)工程施工合同的定義及特征二零二五年
- 消防更換設(shè)備方案范本
- 合伙開辦教育培訓(xùn)機(jī)構(gòu)合同范本
- 嵌入式機(jī)器視覺流水線分揀系統(tǒng)設(shè)計(jì)
- 《電力建設(shè)工程施工安全管理導(dǎo)則》(nbt10096-2018)
- 江蘇省鹽城市東臺市第一教育聯(lián)盟2024-2025學(xué)年七年級下學(xué)期3月月考英語試題(原卷版+解析版)
- 湖南省2025屆高三九校聯(lián)盟第二次聯(lián)考?xì)v史試卷(含答案解析)
- 2024年全國職業(yè)院校技能大賽(高職組)安徽省集訓(xùn)選拔賽“電子商務(wù)”賽項(xiàng)規(guī)程
- 2025年中考數(shù)學(xué)復(fù)習(xí):翻折問題(含解析)
- (統(tǒng)編版2025新教材)語文七下全冊知識點(diǎn)
- 家具全屋定制的成本核算示例-成本實(shí)操
- 第二單元第1課《精彩瞬間》第2課時(shí) 課件-七年級美術(shù)下冊(人教版2024)
評論
0/150
提交評論