溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中封裝與引用的方法

發(fā)布時(shí)間:2020-07-27 10:49:20 來源:億速云 閱讀:270 作者:清晨 欄目:編程語言

不懂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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI