作者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)
1F:推 ckclark:刚试了一下 条件是不以刚好两个_结尾 三个以上是可以的 05/20 00:38
2F:→ timTan:我试__XX___ 是不行的喔 05/20 00:41
3F:推 darkgerm:有第二种的应用范例吗?不太懂哪里需要 05/20 01:01
4F:→ timTan:官方文件内有例子,继承会用到。 05/20 01:05
5F:推 ckclark:你是对的 我误会了 05/20 01:19
※ 编辑: timTan 来自: 61.62.8.191 (05/20 01:20)
6F:→ timTan:刚刚想说是不是 python改了规则 05/20 01:21
7F:推 EntHeEnd:谢谢! 05/20 02:25