我有以下类(class):
class A:
def name(self):
return self.__label
class B(A):
def __init__(self, name)
self.__label = name
ex1 = B('Tom')
print ex1.name()
我得到的是:
AttributeError: B instance has no attribute '_A__label'
出了什么问题以及如何纠正?
最佳答案
当您为属性添加双下划线前缀时,Python 使用 ' name mangling ' 来访问该属性。这意味着它将以以下格式存储类上的属性:_<class name>__<attr name>
。在您的示例中 self.__label
将存储为self._B__label
因为你在B类方法中设置了它。但是当您尝试使用 A 类中的属性时,它会转换 self.__label
进入self._A__label
并发现它没有设置。
双下划线的用例是当您想要确保变量始终位于您的类中,即使子类派生您的类时也是如此。因为可能发生的情况是子类将您的变量重新定义为其他内容,所以使用双下划线变量会使这变得更加困难。
关于python - 使用父类定义的方法时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682370/