从子类访问python父类变量

时间:2016-07-13 16:36:59

标签: python

为什么这不起作用?

class Parent:
    __var = "Whatever"

class Child(Parent):
    def printVar(self):
        print(self.__var)


Timmy = Child()

Timmy.printVar()

我得到以下异常:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 3, in printVar
AttributeError: 'Child' object has no attribute '_Child__var'

3 个答案:

答案 0 :(得分:2)

这是因为您选择使用双前导下划线命名属性。这会触发一些名称错误

您可以self._Parent__var

的形式访问它
In [8]: class Parent:
    __var = "Whatever"
   ...:     
In [9]: class Child(Parent):
    def foo(self): print self._Parent__var
   ...:     
In [10]: a=Child()
In [11]: a.foo()
Whatever

https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

的python文档中提供了更多信息

答案 1 :(得分:1)

您提供了__var作为类变量,由于双引号下划线,该变量名称已被删除。因此,您无法使用__var很好地访问它,而是需要使用self._Parent__var。它只能由Parent __var的实例访问,而不能访问任何子类。

因此,要仍然指示该属性是私有的但是避免使用此名称,您可以考虑使用单个下划线。

class Parent:
    _var = "Whatever"

class Child(Parent):
    def printVar(self):
        print(self._var)

答案 2 :(得分:0)

双下划线用于私有属性,您应该使用单下划线。

class Parent:
    _var = "Whatever"

class Child(Parent):
    def printVar(self):
        print(self._var)


Timmy = Child()

Timmy.printVar()