2014-01-31 98 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