2009-07-21 90 views
10

Python爲類方法和屬性提供private name mangling私人名稱在Python中改名的好處是什麼?

是否存在需要此功能的具體情況,還是僅僅是Java和C++的結轉?

請描述一個用例,如果有的話,應該使用Python名稱mangling?

此外,我不關心作者僅僅是試圖防止意外的外部屬性訪問的情況。我相信這個用例不符合Python編程模型。

回答

0

這個名字是爲了防止意外的外部屬性訪問。大多數情況下,它確保沒有名稱衝突。

+0

我在原來的問題提到了這一點。你是說你不同意? – cmcginty 2009-07-21 23:47:21

+0

我在說這就是原因。所以你不會在你的子類中意外地發生名字衝突。 – 2009-07-22 11:12:53

23

這部分是爲了防止意外內部屬性訪問。這裏有一個例子:

在你的代碼,這是一個圖書館:

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 

沒有私人名字改編,我的意外重複使用你的名字將會破壞你的圖書館。

16

PEP 8

如果你的類是爲了被繼承,你有你不想子類使用,可以考慮用雙下劃線開頭命名它們的屬性和沒有尾隨下劃線。這將調用Python的名稱修改算法,其中該類的名稱被修改爲屬性名稱。 這有助於避免屬性名稱衝突,如果子類無意中包含具有相同名稱的屬性。

(強調)

相關問題