2010-09-10 77 views
1

我有一個模塊,看起來是這樣的:如何從類內部調用私有模塊函數?

def __myFunc(): 
    ... 

class MyClass(object): 
    def __init__(self): 
     self.myVar = __myFunc() 

,我得到的錯誤:

NameError: global name '_MyClass__myFunc' is not defined 

我怎樣才能調用此函數從類裏面?

編輯:由於發佈這個,我發現我可以通過使用一個下劃線而不是雙下劃線來避免自動修改。我使用了兩個「Dive Into Python」,它只聲明雙下劃線表示私有函數。

+0

第1步:不要使用'__'雙下劃線。永遠。毫無意義。 – 2010-09-10 01:39:45

回答

5

這是因爲如果名稱以兩個下劃線開頭,Python的編譯器會替換類內部的方法調用(和屬性訪問)。似乎這也適用於功能。例如,對方法self.__X的調用將被替換爲self._ClassName__X。這使得僞私有屬性和方法成爲可能。

絕對沒有理由對模塊內部的函數使用兩個下劃線。如果函數不應該從外部調用,程序員通常遵循在函數名稱前加下劃線的約定。

例如,如果您不希望它們被子類覆蓋,則只需要對類中的屬性/方法使用兩個下劃線。但很少有這種情況是有用的。

+0

「但是這種情況很少有用」。作爲一個實際的問題,這是有用的零案件。 – 2010-09-10 10:11:08