python變量中單下劃線和雙下劃線的區(qū)別是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、郊區(qū)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、變量的定義
在Python中,有以下幾種方式來定義變量:
xx:公有變量
_xx:前置單下劃線,私有化屬性或方法,一般來講,變量名_xx被看作是“私有 的”,在模塊或類外不可以使用。當(dāng)變量是私有的時(shí)候,用_xx 來表示變量是很好的習(xí)慣。類對象和子類可以訪問,這并不能完全做到真正的私有,只是約定俗成的而已,這樣寫表示不希望這個(gè)變量在外部被直接調(diào)用
__xx:前置雙下劃線,私有化屬性或方法,無法在外部直接訪問(名字重整所以訪問不到,只能是允許這個(gè)類本身進(jìn)行訪問了。連子類也不可以)
__xx__:前后雙下劃線,系統(tǒng)定義名字(這就是在python中強(qiáng)大的魔法方法),因?yàn)樽兞棵鸰_xxx__對Python 來說有特殊含義,對于普通的變量應(yīng)當(dāng)避免這種命名風(fēng)格。
xx_:后置單下劃線,用于避免與Python關(guān)鍵詞的沖突
如以下例子所示,我在test類中定義了x,_x和 __x三個(gè)屬性,并創(chuàng)建了test的類對象t,對這三個(gè)屬性進(jìn)行訪問,__x不能被訪問到
學(xué)習(xí)從來不是一個(gè)人的事情,要有個(gè)相互監(jiān)督的伙伴,工作需要學(xué)習(xí)python或者有興趣學(xué)習(xí)python的伙伴可以私信回復(fù)小編“學(xué)習(xí)” 獲取資料,一起學(xué)習(xí)
可以使用命令dir查看t中的屬性和方法,__x的名字已經(jīng)被重整為“_test__x”了,如果你非要通過外部訪問,也是可以的,可以使用t._test__x對__x進(jìn)行訪問。
python中沒有真正的公有和私有變量,python只是對變量名稱做了一個(gè)變化,還是可以在外部訪問到的,是偽私有。
注:雖然私有變量可以通過_類名__變量名來訪問,但強(qiáng)烈建議不要這樣做!
二、使用不同方法導(dǎo)入模塊,模塊中私有變量的使用區(qū)別
在使用不同方法導(dǎo)入模塊后,是否能使用模塊中的私有屬性和方法,有以下兩種情況
使用 from somemodule import * 進(jìn)行導(dǎo)入,不能導(dǎo)入私有變量,結(jié)果如下:
在使用 import somemodule 導(dǎo)入模塊的情況下,能導(dǎo)入并使用私有屬性和方法
三、對類中的私有屬性進(jìn)行操作的方法
如果你想對類中的私有屬性進(jìn)行操作時(shí),有以下兩種方法種方法:
注:
1,在構(gòu)造函數(shù)__init__中是_x,不是x,你直接x是訪問不到的;
2,為什么是_x 而不是x,這是python中的私有變量(雖然python中沒有公有變量和私有變量,也就是說這是偽私有),在python中,如果一個(gè)變量不想被外部直接訪問,一般是在變量前加一個(gè)下劃線,提醒不要直接訪問(其實(shí)是可以通過self._x訪問到的,如果不想被訪問還可以使用雙下劃線__x,也是不能直接訪問)所以提供get_x這樣的函數(shù)供使用者訪問;
3,為什么要使用_x這樣的偽私有變量,因?yàn)槲覀兪褂胮roperty時(shí),讓方法變成屬性的方式來調(diào)用,一般是這樣寫x=property(...),這樣調(diào)用更加清晰明了;但是如果構(gòu)造函數(shù)中的變量也用x,就會和property中的變量有沖突,所有一般我們寫_x
看完上述內(nèi)容,你們掌握python變量中單下劃線和雙下劃線的區(qū)別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!