2011-06-14 30 views
11

有什麼辦法,使在課堂上某些變量「私有」(或任何self.__var真的是),但可以訪問到另一個類,類似於C++的朋友,除了蟒蛇?我不希望任何一個類中的變量都與之混淆。我也不想複製整個代碼並將其轉換爲第二類。「朋友」荷蘭國際集團班蟒蛇

+1

雙下劃線前綴與「隱私」無關。 name mangling是爲了避免子類中內部實例變量的名稱衝突,而不是阻止訪問。 – detly 2011-06-14 05:03:46

回答

15

沒有,沒有這樣的選擇。

與單下劃線開始,並告訴其他人你的項目工作,別傻了關於他們訪問哪些使用的名稱。

1

我不知道你在說什麼。

>>> class Foo(object): 
... __bar = 42 
... 
>>> class Quux(object): 
... def spam(self): 
...  print Foo._Foo__bar 
... 
>>> q = Quux() 
>>> q.spam() 
42 
+0

'回溯(最近通話最後一個): 文件 「」,1號線,在 q.spam() 文件 「」,3號線,在垃圾郵件 打印Foo._Foo__bar AttributeError的:對象類型「富'沒有任何屬性'_Foo__bar'' – calccrypto 2011-06-14 03:59:51

+0

嘗試'dir(Foo)'來查看你的Python版本是如何破壞它的。 – 2011-06-14 04:00:54

+0

哎呦。好吧你是對的。但是,請嘗試:'Foo(object): \t def __init __(self): \t self .__ bar = 42' – calccrypto 2011-06-14 04:03:43

7

Python的哲學是,訪問控制等問題取決於程序員的紀律。它不會試圖用程序的哪些部分是內部實現細節的語言進行編碼,哪些是文檔化界面的一部分。因此,它不需要構造如friend來試圖聲明程序的哪些其他部分是類的實現的一部分,哪些僅僅是客戶端。

的想法是,如果你不能寫/設計/文檔/使用良好的代碼,而無需編碼部分這些概念到你的程序,你可能在你要麼編碼它們不能做到這一點。因此,最好不要在語言中使用這種結構,因爲它們不會增加語言的表達能力,偶爾也會妨礙語言的表達。

相關問題