下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ython_Python向?qū)ο笕匦灾鄳B(tài)、封裝、多態(tài)1、什么是多態(tài)?個(gè)類表現(xiàn)出的多種狀態(tài):通過(guò)繼承來(lái)實(shí)現(xiàn)的在Java中的表現(xiàn):在個(gè)函數(shù)中需要給參數(shù)指定數(shù)據(jù)類型,如果這個(gè)地可以接收兩個(gè)以上類型的參數(shù),那么這些類型應(yīng)該有個(gè)類,這個(gè)類是所有類對(duì)象的類型。在Python中:函數(shù)的參數(shù)不需要指定數(shù)據(jù)類型,所以我們也不需要通過(guò)繼承的形式來(lái)統(tǒng)組類的類型,換句話說(shuō):所有的對(duì)象其實(shí)都是object類型,所有在Python當(dāng)中處處是多態(tài)。#多態(tài)指的是類事物有多種形態(tài)#動(dòng)物有多種形態(tài):,狗,豬importabcclass Animal(metaclass=abc.ABCMeta): #同類事物:動(dòng)物abc.abs
2、tractmethoddeftalk(self):passclass People(Animal): #動(dòng)物的形態(tài)之:deftalk(self):print(say hello)class Dog(Animal): #動(dòng)物的形態(tài)之:狗deftalk(self):print(say wangwang)class Pig(Animal): #動(dòng)物的形態(tài)之三:豬deftalk(self):print(say aoao)2、多態(tài)性什么是多態(tài)動(dòng)態(tài)綁定(在繼承的背景下使時(shí),有時(shí)也稱為多態(tài)性)多態(tài)性是指在不考慮實(shí)例類型的情況下使實(shí)例#在向?qū)ο蠓ㄖ邪闶沁@樣表述多態(tài)性:#向不同的對(duì)象發(fā)送同條消息(obj.fun
3、c():是調(diào)了obj的法func,稱為向obj發(fā)送了條消息func),不同的對(duì)象在接收時(shí)會(huì)產(chǎn)不同的為(即法)。#也就是說(shuō),每個(gè)對(duì)象可以的式去響應(yīng)共同的消息。所謂消息,就是調(diào)函數(shù),不同的為就是指不同的實(shí)現(xiàn),即執(zhí)不同的函數(shù)。#如:師.下課鈴響了(),學(xué).下課鈴響了(),師執(zhí)的是下班操作,學(xué)執(zhí)的是放學(xué)操作,雖然者消息樣,但是執(zhí)的效果不同3、鴨類型Python崇尚鴨類型,即“如果看起來(lái)像,叫聲像且起路來(lái)像鴨,那么它就是鴨”len()# str list tuple dict set range 對(duì)于len函數(shù)來(lái)說(shuō),這些都是鴨類型index()# str list tuple 對(duì)于index函數(shù)來(lái)說(shuō),這
4、些都是鴨類型print() # 對(duì)于print來(lái)說(shuō)所有的對(duì)象都是鴨類型不是明確的通過(guò)繼承實(shí)現(xiàn)的多態(tài),是通過(guò)個(gè)模糊的概念來(lái)判斷這個(gè)函數(shù)能不能接受這個(gè)類型的參數(shù)、封裝概念:隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)式。好處:1、將變化隔離;2、便于使;3、提復(fù)性;4、提安全性;原則:1、將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái);2、把屬性都隱藏,提供公共法對(duì)其訪問(wèn)。義上的封裝:(把屬性函數(shù)都放到類)class 類名:def 法1(self):passdef 法2(self):pass是為了只有這個(gè)類的對(duì)象才能使定義在類中的法狹義上的封裝:(定義私有成員)把個(gè)屬性或法藏在類中class Goods:_di
5、scount = 0 # 私有的靜態(tài)變量print(_discount)print(Goods._discount)# 在類的外部不能引私有的靜態(tài)變量類中的靜態(tài)變量和法名在程序加載的過(guò)程中就已經(jīng)執(zhí)完了,不需要等待調(diào)在這個(gè)類加載完成之前,Goods這個(gè)名字還沒(méi)有出現(xiàn)在內(nèi)存空間中私有的靜態(tài)屬性可以在類的內(nèi)部使,來(lái)隱藏某個(gè)變量的值類中的私有成員:1、私有的靜態(tài)屬性2、私有的對(duì)象屬性3、私有的法為什么要定義個(gè)私有變量?1、我不想讓你看到這個(gè)值2、我不想讓你修改這個(gè)值3、我想讓你在修改這個(gè)值的時(shí)候有些限制:保證了數(shù)據(jù)的安全4、有些法或?qū)傩圆幌M活惱^承私有變量和私有法:在Python中雙下劃線開(kāi)頭的式將
6、屬性隱藏起來(lái)(設(shè)置成私有的)#其實(shí)這僅僅這是種變形操作#類中所有雙下劃線開(kāi)頭的名稱如_x都會(huì)動(dòng)變形成:_類名_x的形式:classA:_N=0 #類的數(shù)據(jù)屬性就應(yīng)該是共享的,但是語(yǔ)法上是可以把類的數(shù)據(jù)屬性設(shè)置成私有的如_N,會(huì)變形為_(kāi)A_Ndef _init_(self):self._X=10 #變形為self._A_Xdef _foo(self): #變形為_(kāi)A_fooprint(from A)defbar(self):self._foo() #只有在類內(nèi)部才可以通過(guò)_foo的形式訪問(wèn)到.#A._A_N是可以訪問(wèn)到的,即這種操作并不是嚴(yán)格意義上的限制外部訪問(wèn),僅僅只是種語(yǔ)法意義上的變形這種動(dòng)
7、變形的特點(diǎn):1.類中定義的_x只能在內(nèi)部使,如self._x,引的就是變形的結(jié)果。2.這種變形其實(shí)正是針對(duì)外部的變形,在外部是法通過(guò)_x這個(gè)名字訪問(wèn)到的。3.在類定義的_x不會(huì)覆蓋在類定義的_x,因?yàn)轭愔凶冃纬闪耍篲類名_x,類中變形成了:_類名_x,即雙下滑線開(kāi)頭的屬性在繼承給類時(shí),類是法覆蓋的。這種變形需要注意的問(wèn)題是:1.這種機(jī)制也并沒(méi)有真正意義上限制我們從外部直接訪問(wèn)屬性,知道了類名和屬性名就可以拼出名字:_類名_屬性,然后就可以訪問(wèn)了,如a._A_N2.變形的過(guò)程只在類的內(nèi)部效,在定義后的賦值操作,不會(huì)變形在繼承中,類如果不想讓類覆蓋的法,可以將法定義為私有的#正常情況 classA
8、:.deffa(self):.print(from A).deftest(self):. self.fa(). classB(A):.deffa(self):.print(from B). b=B()b.test()fromB#把fa定義成私有的,即_fa classA:.def _fa(self): #在定義時(shí)就變形為_(kāi)A_fa. print(from A).deftest(self):. self._fa() #只會(huì)與所在的類為準(zhǔn),即調(diào)_A_fa. classB(A):.def _fa(self):.print(from B). b=B()b.test()from A封裝與擴(kuò)展性封裝在于明
9、確區(qū)分內(nèi)外,使得類實(shí)現(xiàn)者可以修改封裝內(nèi)的東西不影響外部調(diào)者的代碼;外部使者只知道個(gè)接(函數(shù)),只要接(函數(shù))名、參數(shù)不變,使者的代碼永遠(yuǎn)需改變。這就提供個(gè)良好的合作基礎(chǔ)或者說(shuō),只要接這個(gè)基礎(chǔ)約定不變,則代碼改變不為慮。#類的設(shè)計(jì)者classRoom:def _init_(self,name,owner,width,length,high):=nameself.owner=ownerself._width=widthself._length=lengthself._high=highdef tell_area(self): #對(duì)外提供的接,隱藏了內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),此時(shí)我們想求的是積return self._width * self._length#使者 r1=Room(臥室,egon,20,20,20) r1.tell_area() #使者調(diào)接tell_area#類的設(shè)計(jì)者,輕松的擴(kuò)展了功能,類的使者完全不需要改變的代碼classRoom:def _init_(self,name,owner,width,length,high):=nameself.owner=ownerself._width=widthself._length=lengthself._high=highdef tell_area(self): #對(duì)外提供的接,隱藏內(nèi)部實(shí)現(xiàn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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年倉(cāng)儲(chǔ)貨物應(yīng)急處理合同
- 2025年度物聯(lián)網(wǎng)設(shè)備互聯(lián)互通測(cè)試服務(wù)合同模板4篇
- 湖北省二零二五年度房屋買(mǎi)賣(mài)合同補(bǔ)充協(xié)議3篇
- 二零二五年環(huán)保項(xiàng)目土石方處理與運(yùn)輸合同3篇
- 專業(yè)債權(quán)債務(wù)雙方合同樣本版B版
- 二零二五版臨建臨時(shí)倉(cāng)庫(kù)租賃及倉(cāng)儲(chǔ)信息化改造合同4篇
- 二零二四年度印刷品翻印與再版授權(quán)合同3篇
- 二零二五年度新能源汽車(chē)整車(chē)買(mǎi)賣(mài)合同范本4篇
- 聯(lián)合磁共振T1 mapping與DWI技術(shù)預(yù)測(cè)胸腺上皮性腫瘤危險(xiǎn)分級(jí)的研究
- 基于學(xué)習(xí)進(jìn)階理論的“化學(xué)能量觀”教學(xué)設(shè)計(jì)與實(shí)踐研究
- 2024-2030年中國(guó)海泡石產(chǎn)業(yè)運(yùn)行形勢(shì)及投資規(guī)模研究報(bào)告
- 動(dòng)物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語(yǔ)考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進(jìn)數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計(jì)劃書(shū)
- 2024山西省文化旅游投資控股集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 科普知識(shí)進(jìn)社區(qū)活動(dòng)總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測(cè)指標(biāo)匯總分析
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論