使用方法定义的父项时出错 class

error when using method defined parent 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 格式存储属性:_<class name>__<attr name>。在您的示例中,self.__label 将存储为 self._B__label,因为您在 B class 方法中设置了它。但是,当您尝试使用 A class 中的属性时,它将 self.__label 转换为 self._A__label 并发现它未设置。

双下划线的用例是您希望确保您的变量始终在您的 class 上,即使子 class 派生了您的 class。因为可能发生的是 subclass 将您的变量重新定义为其他变量,使用双下划线变量会使这变得更加困难。