溫馨提示×

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

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

python變量中單下劃線和雙下劃線的區(qū)別是什么

發(fā)布時(shí)間:2021-10-25 18:20:03 來(lái)源:億速云 閱讀:181 作者:柒染 欄目:編程語(yǔ)言

python變量中單下劃線和雙下劃線的區(qū)別是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問題。

一、變量的定義

在Python中,有以下幾種方式來(lái)定義變量:

xx:公有變量

_xx:前置單下劃線,私有化屬性或方法,一般來(lái)講,變量名_xx被看作是“私有 的”,在模塊或類外不可以使用。當(dāng)變量是私有的時(shí)候,用_xx 來(lái)表示變量是很好的習(xí)慣。類對(duì)象和子類可以訪問,這并不能完全做到真正的私有,只是約定俗成的而已,這樣寫表示不希望這個(gè)變量在外部被直接調(diào)用

__xx:前置雙下劃線,私有化屬性或方法,無(wú)法在外部直接訪問(名字重整所以訪問不到,只能是允許這個(gè)類本身進(jìn)行訪問了。連子類也不可以)

__xx__:前后雙下劃線,系統(tǒng)定義名字(這就是在python中強(qiáng)大的魔法方法),因?yàn)樽兞棵鸰_xxx__對(duì)Python 來(lái)說(shuō)有特殊含義,對(duì)于普通的變量應(yīng)當(dāng)避免這種命名風(fēng)格。

xx_:后置單下劃線,用于避免與Python關(guān)鍵詞的沖突

如以下例子所示,我在test類中定義了x,_x和 __x三個(gè)屬性,并創(chuàng)建了test的類對(duì)象t,對(duì)這三個(gè)屬性進(jìn)行訪問,__x不能被訪問到

python變量中單下劃線和雙下劃線的區(qū)別是什么

學(xué)習(xí)從來(lái)不是一個(gè)人的事情,要有個(gè)相互監(jiān)督的伙伴,工作需要學(xué)習(xí)python或者有興趣學(xué)習(xí)python的伙伴可以私信回復(fù)小編“學(xué)習(xí)” 獲取資料,一起學(xué)習(xí)

可以使用命令dir查看t中的屬性和方法,__x的名字已經(jīng)被重整為“_test__x”了,如果你非要通過(guò)外部訪問,也是可以的,可以使用t._test__x對(duì)__x進(jìn)行訪問。

python中沒有真正的公有和私有變量,python只是對(duì)變量名稱做了一個(gè)變化,還是可以在外部訪問到的,是偽私有。

注:雖然私有變量可以通過(guò)_類名__變量名來(lái)訪問,但強(qiáng)烈建議不要這樣做!

二、使用不同方法導(dǎo)入模塊,模塊中私有變量的使用區(qū)別

在使用不同方法導(dǎo)入模塊后,是否能使用模塊中的私有屬性和方法,有以下兩種情況

使用 from somemodule import * 進(jìn)行導(dǎo)入,不能導(dǎo)入私有變量,結(jié)果如下:

在使用 import somemodule 導(dǎo)入模塊的情況下,能導(dǎo)入并使用私有屬性和方法

三、對(duì)類中的私有屬性進(jìn)行操作的方法

如果你想對(duì)類中的私有屬性進(jìn)行操作時(shí),有以下兩種方法種方法:

python變量中單下劃線和雙下劃線的區(qū)別是什么

python變量中單下劃線和雙下劃線的區(qū)別是什么

注:

1,在構(gòu)造函數(shù)__init__中是_x,不是x,你直接x是訪問不到的;

2,為什么是_x 而不是x,這是python中的私有變量(雖然python中沒有公有變量和私有變量,也就是說(shuō)這是偽私有),在python中,如果一個(gè)變量不想被外部直接訪問,一般是在變量前加一個(gè)下劃線,提醒不要直接訪問(其實(shí)是可以通過(guò)self._x訪問到的,如果不想被訪問還可以使用雙下劃線__x,也是不能直接訪問)所以提供get_x這樣的函數(shù)供使用者訪問;

3,為什么要使用_x這樣的偽私有變量,因?yàn)槲覀兪褂胮roperty時(shí),讓方法變成屬性的方式來(lái)調(diào)用,一般是這樣寫x=property(...),這樣調(diào)用更加清晰明了;但是如果構(gòu)造函數(shù)中的變量也用x,就會(huì)和property中的變量有沖突,所有一般我們寫_x

看完上述內(nèi)容,你們掌握python變量中單下劃線和雙下劃線的區(qū)別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向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