python - 使用父类定义的方法时出错

标签 python class oop inheritance instance

我有以下类(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/

相关文章:

vb.net - 如何动态访问所有者表单的成员

java - 为什么 Java 对象类在转换后保持不变?

oop - Racket 子类中绑定(bind)的自动继承

python - Python 中基于字典的文本分类

python - 将装饰器应用于访问类属性的类方法

python - python中如何获取特定文件的路径

java - 当一个对象作为类型父类(super class)传入时,有没有一种方法可以检索子类的类型?

python - 我可以使用该类的对象访问类变量吗

python - PySide 导入错误 Mac OS X El Capitan, Library not loaded : @rpath/libpyside. cpython-34m.1.2.dylib

python - 如何更改元组列表的某些值?