PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)_第1頁
PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)_第2頁
PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)_第3頁
PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)_第4頁
PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

PYTHON學(xué)習(xí)教程資源:訪問限制操作代碼練習(xí)在Class內(nèi)部,可以有屬性和方法,而外部代碼可以通過直接調(diào)用實(shí)例變量的方法來操作數(shù)據(jù),這樣,就隱藏了內(nèi)部的復(fù)雜邏輯。但是,從前面Student類的定義來看,外部代碼還是可以自由地修改一個(gè)實(shí)例的name、score屬性:>>>bart=Student('BartSimpson',59)>>>bart.score59>>>bart.score=99>>>bart.score99如果要讓內(nèi)部屬性不被外部訪問,可以把屬性的名稱前加上兩個(gè)下劃線__,在Python中,實(shí)例的變量名如果以__開頭,就變成了一個(gè)私有變量(private),只有內(nèi)部可以訪問,外部不能訪問,所以,我們把Student類改一改:classStudent(object):def__init__(self,name,score):self.__name=nameself.__score=scoredefprint_score(self):print('%s:%s'%(self.__name,self.__score))改完后,對(duì)于外部代碼來說,沒什么變動(dòng),但是已經(jīng)無法從外部訪問實(shí)例變量.__name和實(shí)例變量.__score了:>>>bart=Student('BartSimpson',59)>>>bart.__nameTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>AttributeError:'Student'objecthasnoattribute'__name'這樣就確保了外部代碼不能隨意修改對(duì)象內(nèi)部的狀態(tài),這樣通過訪問限制的保護(hù),代碼更加健壯。但是如果外部代碼要獲取name和score怎么辦?可以給Student類增加get_name和get_score這樣的方法:classStudent(object):...defget_name(self):returnself.__namedefget_score(self):returnself.__score如果又要允許外部代碼修改score怎么辦?可以再給Student類增加set_score方法:classStudent(object):...defset_score(self,score):self.__score=score你也許會(huì)問,原先那種直接通過bart.score=99也可以修改啊,為什么要定義一個(gè)方法大費(fèi)周折?因?yàn)樵诜椒ㄖ校梢詫?duì)參數(shù)做檢查,避免傳入無效的參數(shù):classStudent(object):...defset_score(self,score):if0<=score<=100:self.__score=scoreelse:raiseValueError('badscore')需要注意的是,在Python中,變量名類似__xxx__的,也就是以雙下劃線開頭,并且以雙下劃線結(jié)尾的,是特殊變量,特殊變量是可以直接訪問的,不是private變量,所以,不能用__name__、__score__這樣的變量名。有些時(shí)候,你會(huì)看到以一個(gè)下劃線開頭的實(shí)例變量名,比如_name,這樣的實(shí)例變量外部是可以訪問的,但是,按照約定俗成的規(guī)定,當(dāng)你看到這樣的變量時(shí),意思就是,“雖然我可以被訪問,但是,請(qǐng)把我視為私有變量,不要隨意訪問”。雙下劃線開頭的實(shí)例變量是不是一定不能從外部訪問呢?其實(shí)也不是。不能直接訪問__name是因?yàn)镻ython解釋器對(duì)外把__name變量改成了_Student__name,所以,仍然可以通過_Student__name來訪問__name變量:>>>bart._Student__name'BartSimpson'但是強(qiáng)烈建議你不要這么干,因?yàn)椴煌姹镜腜ython解釋器可能會(huì)把__name改成不同的變量名??偟膩碚f就是,Python本身沒有任何機(jī)制阻止你干壞事,一切全靠自覺。最后注意下面的這種錯(cuò)誤寫法:>>>bart=Student('BartSimpson',59)>>>bart.get_name()'BartSimpson'>>>bart.__name='NewName'#設(shè)置__name變量!>>>bart.__name'NewName'表面上看,外部代碼“成功”地設(shè)置了__name變量,但實(shí)際上這個(gè)__name變量和class內(nèi)部的__name變量不是一個(gè)變量!內(nèi)部的__name變量已經(jīng)被Python解釋器自動(dòng)改成了_Student__name,而外部代碼給bart新增了一個(gè)__name變量。不信試試:>>>bart.get_name()#get_name()內(nèi)部返回self.__name'BartSimpson'練習(xí)請(qǐng)把下面的Student對(duì)象的gender字段對(duì)外隱藏起來,用get_gender()和set_gender()代替,并檢查參數(shù)有效性:#-*-coding:utf-8-*-#測(cè)試:bart=Student('Bart','male')ifbart.get_gender()!='male':print('測(cè)試失敗!')

溫馨提示

  • 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)論