作者timTan (用口頭禪區分年記)
看板Python
標題Re: [問題] Python private method...
時間Mon May 20 00:27:00 2013
※ 引述《EntHeEnd (ㄆㄆ)》之銘言:
: 請問一下python 的private到底是怎樣呢
: 粗淺搜尋了一下相關資料
: 提到
: python class
: 以 __開頭宣告的 method會被視作private
: 不會被override
: 例如
: class A:
: def __init__(self):
: print("A")
: self.__A()
: def __A(self):
: print("_A")
: class B(A):
: def __A(self):
: print("_B")
: b = B()
: #執行結果
: #A
: #_A
: 問題來了...
: 那 __init__ 為什麼就可以被override呢...
: 謝謝...
請看官方說法
http://docs.python.org/2/tutorial/classes.html#tut-private
單 _ 開頭是 Convension,
這告訴外人,這是 implementation 細節,沒事不要理它。
雙 __ 開頭,且最多只可以有{一個} 後面的 _,
這個時候會產生 name mangling,
不單單只是個Convension, Intepreter 還會把你的 method 改名。
__XX__
它後面有兩個 _ ,所以不會有 name mangling.
而請不要產生 __XX__ 這種 function name,
它有可能會跟未來的某一版 Python 不相容。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.8.191
※ 編輯: timTan 來自: 61.62.8.191 (05/20 00:28)
※ 編輯: timTan 來自: 61.62.8.191 (05/20 00:28)
推 ckclark:剛試了一下 條件是不以剛好兩個_結尾 三個以上是可以的 05/20 00:38
→ timTan:我試__XX___ 是不行的喔 05/20 00:41
推 darkgerm:有第二種的應用範例嗎?不太懂哪裡需要 05/20 01:01
→ timTan:官方文件內有例子,繼承會用到。 05/20 01:05
推 ckclark:你是對的 我誤會了 05/20 01:19
※ 編輯: timTan 來自: 61.62.8.191 (05/20 01:20)
→ timTan:剛剛想說是不是 python改了規則 05/20 01:21
推 EntHeEnd:謝謝! 05/20 02:25