版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)本科 冰雪運(yùn)動(dòng)(運(yùn)動(dòng)實(shí)務(wù))試題及答案
- 2025年大學(xué)農(nóng)學(xué)(農(nóng)業(yè)發(fā)展趨勢(shì))試題及答案
- 2025年高職材料成型及控制技術(shù)(成型工藝優(yōu)化)試題及答案
- 安全工作年會(huì)策劃方案講解
- 2026年熱力學(xué)在航空航天工程中的重要性
- 2025華大教育集團(tuán)教師招聘10人備考題庫參考答案詳解
- 2026云南昆明市盤龍區(qū)新迎第二小學(xué)招聘3人備考題庫參考答案詳解
- 2025年河南建筑職業(yè)技術(shù)學(xué)院招聘工作人員30人備考題庫及參考答案詳解1套
- 2022-2023學(xué)年廣東深圳羅湖外語實(shí)驗(yàn)學(xué)校九年級(jí)上學(xué)期第一次月考?xì)v史試題含答案
- 2025北方特種能源集團(tuán)審計(jì)中心工作人員招聘?jìng)淇碱}庫(含答案詳解)
- 光伏電站巡檢培訓(xùn)課件
- 【期末必刷選擇題100題】(新教材)統(tǒng)編版八年級(jí)道德與法治上學(xué)期專項(xiàng)練習(xí)選擇題100題(含答案與解析)
- 年末節(jié)前安全教育培訓(xùn)
- GB/T 93-2025緊固件彈簧墊圈標(biāo)準(zhǔn)型
- 建筑公司工資薪酬管理制度(3篇)
- 2025至2030中國(guó)疝氣修補(bǔ)術(shù)行業(yè)調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 建設(shè)工程測(cè)繪驗(yàn)線標(biāo)準(zhǔn)報(bào)告模板
- 2024-2025學(xué)年福建省廈門市雙十中七年級(jí)(上)期末英語試卷
- 漢語言本科畢業(yè)論文范文模板
- 2025年協(xié)警輔警招聘考試題庫(新)及答案
- 統(tǒng)編版九年級(jí)上冊(cè)語文期末復(fù)習(xí):全冊(cè)重點(diǎn)考點(diǎn)手冊(cè)
評(píng)論
0/150
提交評(píng)論