python 私有函數(shù)姚炕、專有方法

私有和專有

在任何語言中,都會規(guī)定某些對象(屬性迁杨、方法钻心、函數(shù)、類等)只能夠在某個范圍內(nèi)訪問铅协,出了這個范圍就不能訪問了捷沸。這是“公”、“私”之分狐史。此外痒给,還會專門為某些特殊的東西指定一些特殊表示说墨,比如類的名字就不能用class,def等苍柏,這就是保留字尼斧。除了保留字,python中還為類的名字做了某些特殊準備试吁,就是“專有”的范疇棺棵。

私有函數(shù)

在某些時候,會看到有一種方法命名比較特別熄捍,是以“__”雙劃線開頭的烛恤,將這類命名的函數(shù)/方法稱之為“私有函數(shù)”。

所謂私有函數(shù)余耽,就是:

私有函數(shù)不可以從它們的模塊外面被調(diào)用
私有類方法不能夠從它們的類外面被調(diào)用
私有屬性不能夠從它們的類外面被訪問
跟私有對應的缚柏,就是所謂的公有啦。有的編程語言用特殊的關(guān)鍵詞來說明某函數(shù)或方法或類是私有還是公有碟贾。但是python僅僅用名字來說明币喧。

如果一個 Python 函數(shù),類方法,或?qū)傩缘拿忠詢蓚€下劃線開始 (但不是結(jié)束),它是私有的;其它所有的都是公有的。類方法或者是私有 (只能在它們自已的類中使用) 或者是公有 (任何地方都可使用)袱耽。例如:

class Person:
    def __init__(self,name):
        self.name = name

    def __work(self,salary):
        print "%s salary is:%d"%(self.name,salary)

這里邊定義的方法'__work()'就是一個私有方法杀餐。

下面把上面的類進行完善,然后運行扛邑,通過實例來調(diào)用這個私有方法

#!/usr/bin/env python
#coding:utf-8
 
class Person:
    def __init__(self,name):
        self.name = name
        print self.name
         
    def __work(self,salary):
        print "%s salary is: %d"%(self.name,salary)
         
if __name__=="__main__":
    officer = Person("Tom")
    officer.__work(1000)

#運行結(jié)果

Tom
Traceback (most recent call last):
  File "225.py", line 14, in <module>
    officer.__work(1000)
AttributeError: Person instance has no attribute '__work'

從運行結(jié)果中可以看出怜浅,當運行到officer.__work(1000)的時候,報錯了蔬崩。并且從報錯信息中說恶座,沒有該方法。這說明沥阳,這個私有方法跨琳,無法在類外調(diào)用(其實類外可以調(diào)用私有方法,就是太麻煩桐罕,況且也不提倡脉让,故濾去)。

下面將上述代碼進行修改功炮,成為:

#!/usr/bin/env python
#coding:utf-8
 
class Person:
    def __init__(self,name):
        self.name = name
        print self.name
         
    def __work(self,salary):
        print "%s salary is: %d"%(self.name,salary)
    
    def worker(self):
        self.__work(500)        #在類內(nèi)部調(diào)用私有方法

if __name__=="__main__":
    officer = Person("Tom")
    #officer.__work(1000)
    officer.worker()

#運行結(jié)果

Tom
Tom salary is: 500

結(jié)果正是要得到的溅潜。是否理解私有方法的用法了呢?

專有方法

如果是以雙劃線開頭薪伏,但不是以它結(jié)尾滚澜,所命名的方法是私有方法;

如果以雙劃線開頭嫁怀,并且以雙劃線結(jié)尾设捐,所命名的方法就是專有方法借浊。

這是python規(guī)定的。所以在寫程序的時候要執(zhí)行萝招,不執(zhí)行就是跟python過不去蚂斤,過不去就報錯了。

比如前面反復提到的'init()',就是一個典型的專有方法槐沼。那么自己在寫別的方法時曙蒸,就不要用“__”開頭和結(jié)尾了。雖然用了也大概沒有什么影響岗钩,但是在可讀性上就差很多了逸爵,一段程序如果可讀性不好,用不了多長時間自己就看不懂了凹嘲,更何況別人呢?

關(guān)于專有方法构韵,出了'init()'之外周蹭,還有諸如:'str','setitem'等等,要向看疲恢,可以利用dir()函數(shù)在交互模式下看看某個函數(shù)里面的專有東西凶朗。當然,也可以自己定義啦显拳。

因為'init'用的比較多棚愤,所以前面很多例子都是它。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杂数,一起剝皮案震驚了整個濱河市宛畦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揍移,老刑警劉巖次和,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異那伐,居然都是意外死亡踏施,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門罕邀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅形,“玉大人,你說我怎么就攤上這事诉探∪瞻荆” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵阵具,是天一觀的道長碍遍。 經(jīng)常有香客問我定铜,道長,這世上最難降的妖魔是什么怕敬? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任揣炕,我火速辦了婚禮,結(jié)果婚禮上东跪,老公的妹妹穿的比我還像新娘畸陡。我一直安慰自己,他們只是感情好虽填,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布丁恭。 她就那樣靜靜地躺著,像睡著了一般斋日。 火紅的嫁衣襯著肌膚如雪牲览。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天恶守,我揣著相機與錄音第献,去河邊找鬼。 笑死兔港,一個胖子當著我的面吹牛庸毫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衫樊,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼飒赃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了科侈?” 一聲冷哼從身側(cè)響起载佳,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臀栈,沒想到半個月后刚盈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡挂脑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年藕漱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崭闲。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肋联,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刁俭,到底是詐尸還是另有隱情橄仍,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站侮繁,受9級特大地震影響虑粥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宪哩,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一娩贷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锁孟,春花似錦彬祖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圆恤,卻和暖如春突倍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盆昙。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工赘方, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弱左。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像炕淮,于是被迫代替她去往敵國和親拆火。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容