2011-05-20 67 views
7

我想從基類訪問一個變量。這裏的父類:Python:'super'對象沒有屬性'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

基類的__init__然後,將得到的對象具有設置有(例如some_var)的屬性,因爲它是非常相同的對象作爲派生類的__init__self。你可以也應該只是使用self.some_var無處不在。 super用於訪問基類的東西,但實例變量(如名稱所示)是實例的一部分,而不是該實例的類的一部分。

4

父類中不存在屬性some_var。

當您在__init__期間設置它時,它是在您的Child類的實例中創建的。