python類的訪問可見性問題

在很多面向?qū)ο缶幊陶Z言中膘流,我們通常會(huì)將對(duì)象的屬性設(shè)置為私有的(private)或受保護(hù)的(protected)絮缅,簡(jiǎn)單的說就是不允許外界訪問,而對(duì)象的方法通常都是公開的(public)呼股,因?yàn)楣_的方法就是對(duì)象能夠接受的消息耕魄。在Python中,屬性和方法的訪問權(quán)限只有兩種彭谁,也就是公開的和私有的吸奴,如果希望屬性是私有的,在給屬性命名時(shí)可以用兩個(gè)下劃線作為開頭缠局。
但是则奥,Python并沒有從語法上嚴(yán)格保證私有屬性或方法的私密性,它只是給私有的屬性和方法換了一個(gè)名字來妨礙對(duì)它們的訪問狭园,事實(shí)上如果你知道更換名字的規(guī)則仍然可以訪問到它們读处,下面的代碼就可以驗(yàn)證這一點(diǎn)。之所以這樣設(shè)定唱矛,可以用這樣一句名言加以解釋罚舱,就是"We are all consenting adults here"俊戳。因?yàn)榻^大多數(shù)程序員都認(rèn)為開放比封閉要好,而且程序員要自己為自己的行為負(fù)責(zé)馆匿。

class Test:
    def __init__(self, name, age):
        #name為公開
        self.name = name
        #__age 為私有
        self.__age = age
    def play_game(self):
        print('%s可以打游戲抑胎。'%(self.name))
    
    def __study(self):
        print('這是在__study函數(shù)下打印的')
        print('#'*10)
        print('年齡是:',self.__age)

test = Test('張三', 18)
test.play_game()
print(test.name)
#print(test.__age) # 報(bào)錯(cuò)AttributeError: 'Test' object has no attribute '__age'
print(test._Test__age) #可以訪問到 18
#test.__study() #AttributeError: 'Test' object has no attribute '__study'
test._Test__study() #可以訪問到

在實(shí)際開發(fā)中,我們并不建議將屬性設(shè)置為私有的渐北,因?yàn)檫@會(huì)導(dǎo)致子類無法訪問(后面會(huì)講到)阿逃。所以大多數(shù)Python程序員會(huì)遵循一種命名慣例就是讓屬性名以單下劃線開頭來表示屬性是受保護(hù)的,本類之外的代碼在訪問這樣的屬性時(shí)應(yīng)該要保持慎重赃蛛。這種做法并不是語法上的規(guī)則恃锉,單下劃線開頭的屬性和方法外界仍然是可以訪問的,所以更多的時(shí)候它是一種暗示或隱喻呕臂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末破托,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歧蒋,更是在濱河造成了極大的恐慌土砂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜洽,死亡現(xiàn)場(chǎng)離奇詭異萝映,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阐虚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門序臂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人实束,你說我怎么就攤上這事奥秆。” “怎么了咸灿?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵构订,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我析显,道長(zhǎng)鲫咽,這世上最難降的妖魔是什么签赃? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任谷异,我火速辦了婚禮,結(jié)果婚禮上锦聊,老公的妹妹穿的比我還像新娘歹嘹。我一直安慰自己,他們只是感情好孔庭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布尺上。 她就那樣靜靜地躺著材蛛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怎抛。 梳的紋絲不亂的頭發(fā)上卑吭,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音马绝,去河邊找鬼豆赏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛富稻,可吹牛的內(nèi)容都是我干的掷邦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼椭赋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抚岗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哪怔,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤宣蔚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后认境,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體件已,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年元暴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篷扩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茉盏,死狀恐怖鉴未,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸠姨,我是刑警寧澤铜秆,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站讶迁,受9級(jí)特大地震影響连茧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巍糯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一啸驯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祟峦,春花似錦罚斗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袱吆。三九已至,卻和暖如春距淫,著一層夾襖步出監(jiān)牢的瞬間绞绒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工榕暇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留处铛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓拐揭,卻偏偏與公主長(zhǎng)得像撤蟆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堂污,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359