你能解释为什么私人班级名称会被破坏吗?考虑以下课程:
class A:
__a=32
def func():
return a
__a
是此类课程的私有字段。但是将__a
重命名为_A__a
是什么意思?如果我们无法从这个主体访问类字段,我不明白python中有哪些方法?
答案 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
版本。