小學(xué)課后服務(wù) Python少兒編程 進(jìn)階篇:9-面向?qū)ο缶幊踢M(jìn)階 課件_第1頁
小學(xué)課后服務(wù) Python少兒編程 進(jìn)階篇:9-面向?qū)ο缶幊踢M(jìn)階 課件_第2頁
小學(xué)課后服務(wù) Python少兒編程 進(jìn)階篇:9-面向?qū)ο缶幊踢M(jìn)階 課件_第3頁
小學(xué)課后服務(wù) Python少兒編程 進(jìn)階篇:9-面向?qū)ο缶幊踢M(jìn)階 課件_第4頁
小學(xué)課后服務(wù) Python少兒編程 進(jìn)階篇:9-面向?qū)ο缶幊踢M(jìn)階 課件_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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,等級(jí)為:%s'%(self.name,self.hp,self.lv))

orc=Orc('史瑞克',200,2)

orc.desc()

在面向?qū)ο蟮木幊趟枷胫?,將屬性和方法隱藏在類中的行為,就稱為封裝。屬性和方法通過對(duì)象調(diào)用,對(duì)于調(diào)用者來說,隱藏了具體的實(shí)現(xiàn)細(xì)節(jié)。封裝除了隱藏細(xì)節(jié)外,還有另一個(gè)目的:數(shù)據(jù)的安全就像機(jī)箱的目的是為了保護(hù)電腦內(nèi)部的主板、硬盤、處理器、電源等那么對(duì)于當(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,等級(jí)為:%s'%(self.name,self.hp,self.lv))

orc=Orc('史瑞克',200,2)#語法上沒問題,但是不符合實(shí)際情況!

orc.hp=-200

orc.desc()

這就好比,如何能保證電腦內(nèi)部硬盤的安全,同時(shí)又能夠讓外部能夠訪問到硬盤對(duì)于電腦來說是機(jī)箱+USB接口,對(duì)于類來說,是私有+getter/setter1屬性前加上__,就變成了了私有屬性classOrc:

def__init__(self,name,hp,lv):

self.__name=name

self.__hp=hp

self.__lv=lv

defdesc(self):

print('我是%s,血量為:%s,等級(jí)為:%s'%

(self.__name,self.__hp,self.__lv))

orc=Orc('史瑞克',200,2)

orc.desc()#此時(shí)打印,會(huì)報(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)行(類外部訪問),就會(huì)報(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,等級(jí)為:%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對(duì)應(yīng)的setter方法,類定義如下:外部訪問過程如下:classOrc:

def__init__(self,name,hp,lv):

self.__name=name

self.__hp=hp

self.__lv=lv

defdesc(self):

print('我是%s,血量為:%s,等級(jí)為:%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è)對(duì)象減少了50點(diǎn)血

orc.set_hp(150)

orc.desc()

print(orc.get_hp())我是史瑞克,血量為:200,等級(jí)為:2我是史瑞克,血量為:150,等級(jí)為:2150輸出結(jié)果為:思考:使用私有+getter/setter為什么解決數(shù)據(jù)安全的問題?為什么說私有+getter/setter就解決了數(shù)據(jù)的安全(臟數(shù)據(jù))問題呢?關(guān)鍵在setter方法上,在該方法中,我們可以做任何的處理,比如對(duì)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è)對(duì)象減少了50點(diǎn)血

orc.set_hp(-150)

orc.desc()

print(orc.get_hp())

我是史瑞克,血量為:200,等級(jí)為:2我是史瑞克,血量為:0,等級(jí)為:20運(yùn)行結(jié)果為:三大特征之繼承現(xiàn)在假設(shè)我們做一個(gè)學(xué)校管理系統(tǒng),那么就可能會(huì)要新建兩個(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對(duì)象調(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對(duì)象的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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論