下面的代码生成错误:Python的父类儿童私有变量的访问
class A(object):
def say_something(self):
print (self.foo)
print(self.__bar)
class B(A):
def __init__(self):
self.foo='hello'
self.__something='world'
test=B()
test.say_something()
印刷的“你好”是成功的,但“世界”生成以下错误:
print(self.__bar)
AttributeError: 'B' object has no attribute '_A__bar'
我对此我感到惊讶,我希望我的父类有一个方法,可以访问其子级保证的私有属性。有没有解决这个问题的标准方法?
附加问题:所以,如果我为一个属性使用单个下划线,从不同的对象中使用它会不会是错误的?是一个单独的下划线说“我会使用这个,但你的用户不应该”,或者甚至应该让开发者把它看作是私有的。请问这段代码是不好的风格:
class A(object):
def __init__(self):
self._foo='bar'
Class B(object):
def __init__(self):
a=A()
b=A._foo
您可能会发现以下问题很有用:[Python中对象名称之前的单下划线和双下划线的含义](http://stackoverflow.com/questions/1301346/the-meaning-of-a -single-and-a-double-underscore-before-an-object-name-in-python) –