Python父类访问子私有变量

Mik*_*lla 4 python oop inheritance class

以下代码生成错误:

class A(object):
    def say_something(self):
        print(self.foo)
        print(self.__bar)

class B(A):
    def __init__(self):
        self.foo = 'hello'
        self.__bar = 'world'

test = B()
test.say_something()
Run Code Online (Sandbox Code Playgroud)

打印'hello'成功,但'world'会产生以下错误:

    print(self.__bar)
Run Code Online (Sandbox Code Playgroud)

我对此感到惊讶,我希望我的父类有一个方法可以访问其子级保证拥有的私有属性.有没有一些解决这个问题的标准方法?

附加问题:因此,如果我对一个属性使用单个下划线,那么从另一个对象使用它是不对的?是一个下划线说"我会使用这个,但用户不应该"或甚至开发人员将其视为私有.这段代码是不好的风格:

class A(object):
    def say_something(self):
        print(self.foo)
        print(self.__bar)

class B(A):
    def __init__(self):
        self.foo = 'hello'
        self.__bar = 'world'

test = B()
test.say_something()
Run Code Online (Sandbox Code Playgroud)

Thi*_*ter 10

您可以使用self._B__something它来访问它.但是,这不是你应该做的.正确的解决方案是重命名__bar_bar.

双下划线名称修改背后的想法是避免与子类/超类冲突 - 它不应该用于私有变量.如果变量应被视为私有/内部,则在其前面加上一个下划线.这不会导致任何特殊处理,但每个python开发人员都知道它不是包含该变量的类/模块的公共API的一部分.