2014-01-31 59 views
2

我想使用屬性來獲取類變量的值,但以下代碼導致錯誤「無法設置屬性」錯誤並刪除行self.var3 = var3導致無限遞歸。我想我對財產的理解很差,請有人指出這裏出了什麼問題。無法設置屬性和無限遞歸

class Parent(object): 
    def __init__ (self, var1=None, var2=None): 
     self.var1=var1 
     self.var2=var2 

class Child(Parent): 
    def __init__(self, var1, var2, var3): 
     super(Child, self).__init__(var1=var1, var2=var2) 
     self.var3=var3 

    @property 
    def var3(self): 
     return self.var3 

c1 = Child(6, 7, 8) 
c2 = Child(1, 2, 3) 
print c1.var1, c1.var2, c1.var3 
print c2.var1, c2.var2, c2.var3 
+1

無限遞歸,因爲'回報self.var3'訪問屬性('var3')再次 - 使用不同的成員變量。 – user2864740

回答

4

您需要使用不同的名稱屬性與屬性:

class Child(Parent): 
    def __init__(self, var1, var2, var3): 
     super(Child, self).__init__(var1=var1, var2=var2) 
     self._var3=var3  # added underscore 

    @property 
    def var3(self): 
     return self._var3 # same underscore here 

輸出:

>>> print c1.var1, c1.var2, c1.var3 
6 7 8 
>>> print c2.var1, c2.var2, c2.var3 
1 2 3