與大多數語言一樣,python 也有私有的概念:
• 私有函式不可以從它們的模組外面被呼叫
• 私有類方法不能夠從它們的類外面被呼叫
• 私有屬性不能夠從它們的類外面被訪問
與大多數的語言不同,乙個 python 函式,方法,或屬性是私有還是公有,完全取決於它的名字。
如果乙個 python 函式,類方法,或屬性的名字以兩個下劃線開始 (但不是結束),它是私有的;其它所有的都是公有的。 python 沒有類方法保護 的概念 (只能用於它們自已的類和子類中)。類方法或者是私有 (只能在它們自已的類中使用) 或者是公有 (任何地方都可使用)。
在 ***fileinfo 中,有兩個方法:__parse 和 __setitem__。正如我們已經討論過的,__setitem__ 是乙個專有方法;通常,你不直接呼叫它,而是通過在乙個類上使用字典語法來呼叫,但它是公有的,並且如果有乙個真正好的理由,你可以直接呼叫它 (甚至從 fileinfo 模組的外面)。然而,__parse 是私有的,因為在它的名字前面有兩個下劃線。
note: method naming c onventions
在 python 中,所有的專用方法 (像 __setitem__) 和內建屬性 (像 __doc__) 遵守乙個標準的命名習慣:開始和結束都有兩個下劃線。不要對你自已的方法和屬性用這種方法命名;到最後,它只會把你 (或其它人) 搞亂。
1. 嘗試呼叫乙個私有方法
>>> import fileinfo
>>> m = fileinfo.***fileinfo()
>>> m.__parse("/music/_singles/kairo.***") (1)
traceback (innermost last):
file "", line 1, in ?
attributeerror: '***fileinfo' instance has no attribute '__parse'
(1) 如果你試圖呼叫乙個私有方法,python 將引發乙個有些誤導的異常,宣稱那個方法不存在。當然它確實存在,但是它是私有的,所以在類外是不可使用的。嚴格地說,私有方法在它們的類外是可以訪問的,只是不容易處理。在 python 中沒有什麼是真正私有的;在內部,私有方法和屬性的名字被忽然改變和恢復,以致於使得它們看上去用它們給定的名字是無法使用的。你可以通過 _***fileinfo__parse 名字來使用 ***fileinfo 類的 __parse方法。知道了這個方法很有趣,然後要保證決不在真正的**中使用它。
私有方法由於某種原因而私有,但是像其它很多在 python 中的東西一樣,它們的私有化基本上是習慣問題,而不是強迫的。
Python類中的私有成員 私有函式,私有變數
在python中定義私有變數只需要在變數名或函式名前加上 兩個下劃線,那麼這個函式或變數就會為私有的了。在內部,python使用一種 name mangling 技術,將 membername替換成 classname membername,所以你在外部使用原來的私有成員的名字時,會提示找不到。命名...
Python類中的私有成員 私有函式,私有變數
python類中的私有成員 私有函式,私有變數 python俱樂部 在python中定義私有變數只需要在變數名或函式名前加上 兩個下劃線,那麼這個函式或變數就會為私有的了。在內部,python使用一種 name mangling 技術,將 membername替換成 classname member...
python 私有函式 專有方法
在任何語言中,都會規定某些物件 屬性 方法 函式 類等 只能夠在某個範圍內訪問,出了這個範圍就不能訪問了。這是 公 私 之分。此外,還會專門為某些特殊的東西指定一些特殊表示,比如類的名字就不能用class,def等,這就是保留字。除了保留字,python中還為類的名字做了某些特殊準備,就是 專有 的...