2014-04-02 58 views
-1

我知道python中的所有東西都是公共的,我們只是將這些變量用雙下劃線作爲私有變量來處理,但我們可以通過其他方式在類之外訪問這些變量。但是當我測試下面的代碼時遇到了一些問題。關於python私有方法的一個奇怪的問題

class SA: 
    def __myPrivate(self,name): 
     return 'private'+name 
    def _myProtected(self): 
     self.name = 'protected name'  
    def setName(self,name): 
     self.name = self.__myPrivate(name) 
    def getName(self): 
     return self.name 
    def printf(self): 
     print self.name 

si = SA() 
print si._SA_myPrivate('niutou') 

的例外是:

print si._SA_myPrivate('niutou') 
AttributeError: SA instance has no attribute '_SA_myPrivate' 

爲什麼呢?請幫我解決這個問題。謝謝!

是的,我意識到我犯了一個低級錯誤!它應該是si。 SA _myPrivate( '牛頭')不si._SA_myPrivate( '牛頭')

+3

閱讀文檔的第二段:https://docs.python.org/3/tutorial/classes.html#private-variables – Blender

+0

可能因爲您從不定義'_SA_myPrivate'屬性。 –

回答

3

你想

>>> print si._SA__myPrivate('niutou') 
privateniutou 

注意雙_。魔術替換保留了這一點,只有在該屬性被轉換時才附加_ + classname

+0

我不理解你,你能詳細解釋一下嗎?謝謝! – user3418149

+0

作爲評分最高的評論指出:閱讀教程:https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references – metatoaster