一个关于python私有方法的奇怪问题

时间:2014-04-02 02:32:37

标签: 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('niutou')不是si._SA_myPrivate('niutou')

1 个答案:

答案 0 :(得分:3)

你想要

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

请注意双_。神奇的替代品保留了这一点,只有在转换该属性时附加_ + classname