一个班级中的私人名称是什么意思

时间:2014-02-27 05:46:39

标签: python class

你能解释为什么私人班级名称会被破坏吗?考虑以下课程:

class A:
    __a=32
    def func():
        return a

__a是此类课程的私有字段。但是将__a重命名为_A__a是什么意思?如果我们无法从这个主体访问类字段,我不明白python中有哪些方法?

1 个答案:

答案 0 :(得分:4)

名称修改的目的是防止意外名称冲突在子类中定义相同的属性。请注意,这与阻止对该属性的访问无关。如果您想假装语言级访问控制是一个有意义的安全边界,请使用其他语言。 Python的座右铭是“我们都同意成年人”。

无论如何,一旦你纠正了语法,你的例子就可以了。

class A(object):
    __a = 32
    def func(self):
        return self.__a

class B(A):
    __a = 41
    def bar(self):
        return self.__a

    def bar2(self):
        return self._A__a

print A().func()
print B().func()
print B().bar()
print B().bar2()

B().func()仍打印出32,因为它正在访问类__a中定义的A版本。