您好,登錄后才能下訂單哦!
不懂python中封裝與引用的方法?其實(shí)想解決這個(gè)問題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。
封裝分為兩個(gè)層面
封裝其實(shí)分為兩個(gè)層面,但無論哪種層面的封裝,都要對(duì)外界提供好訪問你內(nèi)部隱藏內(nèi)容的接口(接口可以理解為入口,有了這個(gè)入口,
使用者無需且不能夠直接訪問到內(nèi)部隱藏的細(xì)節(jié),只能走接口,并且我們可以在接口的實(shí)現(xiàn)上附加更多的處理邏輯,從而嚴(yán)格控制使用者
的訪問)。
第一個(gè)層面的封裝(什么都不用做):創(chuàng)建類和對(duì)象會(huì)分別創(chuàng)建二者的名稱空間,我們只能用類名.或者obj.的方式去訪問里面的名字,這
本身就是一種封裝。
print(m1.brand) #實(shí)例化對(duì)象(m1.)print(motor_vehicle.tag) #類名(motor_vehicle.)-------------輸出結(jié)果-------------- 春風(fēng) fuel oil
注意:對(duì)于這一層面的封裝(隱藏),類名.和實(shí)例名.就是訪問隱藏屬性的接口
第二個(gè)層面的封裝:類中把某些屬性和方法隱藏起來(或者說定義成私有的),只在類的內(nèi)部使用、外部無法訪問,或者留下少量接口(函
數(shù))供外部訪問。
Python中私有化的方法也比較簡(jiǎn)單,即在準(zhǔn)備私有化的屬性(包括方法、數(shù)據(jù))名字前面加兩個(gè)下劃線即可。
類中所有雙下劃線開頭的名稱如_x都會(huì)自動(dòng)變形成:類名__x的形式:
class A: __N=0 #類的數(shù)據(jù)屬性就應(yīng)該是共享的,但是語法上是可以把類的數(shù)據(jù)屬性設(shè)置成私有的如__N,會(huì)變形為_A__N def __init__(self): self.__X=10 #變形為self._A__X def __foo(self): #變形為_A__foo print('from A') def bar(self): self.__foo() #只有在類內(nèi)部才可以通過__foo的形式訪問到.
這種自動(dòng)變形的特點(diǎn):
1、類中定義的__x只能在內(nèi)部使用,如self.__x,引用的就是變形的結(jié)果。
2、這種變形其實(shí)正是針對(duì)外部的變形,在外部是無法通過__x這個(gè)名字訪問到的。
3、在子類定義的_x不會(huì)覆蓋在父類定義的__x,因?yàn)樽宇愔凶冃纬闪耍鹤宇惷鸰x,而父類中變形成了:父類名__x,即雙下滑線開頭的屬性
在繼承給子類時(shí),子類是無法覆蓋的。
注意:對(duì)于這一層面的封裝(隱藏),我們需要在類中定義一個(gè)函數(shù)(接口函數(shù))在它內(nèi)部訪問被隱藏的屬性,然后外部就可以使用了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python中封裝與引用的方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。