为什么这不起作用?
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'
答案 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()