web-dev-qa-db-ja.com

Python:「スーパー」オブジェクトには属性がありません「attribute_name」

基本クラスから変数にアクセスしようとしています。親クラスは次のとおりです。

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で基本クラスから変数にアクセスするための推奨される方法は何ですか?

17
invarbrass

基本クラスの__init__が実行された後、派生オブジェクトは、派生クラス 'some_varselfとまったく同じオブジェクトであるため、そこに属性が設定されます(例:__init__)。どこでもself.some_varを使用できます。 superは基本クラスからのものにアクセスするためのものですが、インスタンス変数は(名前が示すように)インスタンスの一部であり、そのインスタンスのクラスの一部ではありません。

27
user395760

属性some_varがParentクラスに存在しません。

__init__中に設定すると、Childクラスのインスタンスで作成されます。

5
Marek P