Python爲類方法和屬性提供private name mangling。私人名稱在Python中改名的好處是什麼?
是否存在需要此功能的具體情況,還是僅僅是Java和C++的結轉?
請描述一個用例,如果有的話,應該使用Python名稱mangling?
此外,我不關心作者僅僅是試圖防止意外的外部屬性訪問的情況。我相信這個用例不符合Python編程模型。
Python爲類方法和屬性提供private name mangling。私人名稱在Python中改名的好處是什麼?
是否存在需要此功能的具體情況,還是僅僅是Java和C++的結轉?
請描述一個用例,如果有的話,應該使用Python名稱mangling?
此外,我不關心作者僅僅是試圖防止意外的外部屬性訪問的情況。我相信這個用例不符合Python編程模型。
這個名字是爲了防止意外的外部屬性訪問。大多數情況下,它確保沒有名稱衝突。
這部分是爲了防止意外內部屬性訪問。這裏有一個例子:
在你的代碼,這是一個圖書館:
class YourClass:
def __init__(self):
self.__thing = 1 # Your private member, not part of your API
在我的代碼,其中我是從你的庫類繼承:
class MyClass(YourClass):
def __init__(self):
# ...
self.__thing = "My thing" # My private member; the name is a coincidence
沒有私人名字改編,我的意外重複使用你的名字將會破壞你的圖書館。
從PEP 8:
如果你的類是爲了被繼承,你有你不想子類使用,可以考慮用雙下劃線開頭命名它們的屬性和沒有尾隨下劃線。這將調用Python的名稱修改算法,其中該類的名稱被修改爲屬性名稱。 這有助於避免屬性名稱衝突,如果子類無意中包含具有相同名稱的屬性。
(強調)
我在原來的問題提到了這一點。你是說你不同意? – cmcginty 2009-07-21 23:47:21
我在說這就是原因。所以你不會在你的子類中意外地發生名字衝突。 – 2009-07-22 11:12:53