Python: 'super' 对象没有属性 'attribute_name'

标签 python attributes super

我正在尝试从基类访问一个变量。这是父类:

class Parent(object):
    def __init__(self, value):
        self.some_var = value

这是子类:

class Child(Parent):
    def __init__(self, value):
        super(Child, self).__init__(value)

    def doSomething(self):
        parent_var = super(Child, self).some_var

现在,如果我尝试运行这段代码:

obj = Child(123)
obj.doSomething()

我得到以下异常:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    obj.doSomething()
  File "test.py", line 10, in doSomething
    parent_var = super(Child, self).some_var
AttributeError: 'super' object has no attribute 'some_var'

我做错了什么?在 Python 中从基类访问变量的推荐方法是什么?

最佳答案

在基类的__init__之后跑了,派生对象在那里设置了属性(例如 some_var ),因为它与 self 是完全相同的对象在派生类中'__init__ .你可以而且应该只使用 self.some_var到处。 super用于从基类访问内容,但实例变量(如名称所示)是实例的一部分,而不是该实例类的一部分。

关于Python: 'super' 对象没有属性 'attribute_name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075758/

相关文章:

objective-c - 我需要调用[super viewDidUnload]吗?

python - Scikit-learn的fetch不下载数据集

python - Pandas - 如果在列中重复特定值,则删除行并保留在第一位

python - 覆盖时访问基类属性

java - Java 中的 boolean 字段输出不正确

android - Apksigner 没有在 termux 上签署 apk

python - 为什么 python argparse 模块不解析哈希标记?

python - JustHost.com 和 Python CGI

angular - 如何使用属性设置 Angular 4 组件的样式?

ruby-on-rails - Rails 使用他的 getter 覆盖属性