无法弄清楚为什么@property不起作用

时间:2013-12-03 09:42:51

标签: python

以下代码无法正常运行。 setlen不会从此行调用a.length=10

class A():
    def __init__(self,length=0):
        self._length=length
        self._area=length**2

    @property
    def area(self):
        return self._area

    def getlen(self):
        return self._length

    def setlen(self,x):
        self._length=x
        self.area=x**2

    length=property(getlen, setlen)

a=A()
a.length=10
print a.area

2 个答案:

答案 0 :(得分:3)

你在使用Python 2.x.类需要直接或通过继承链从object继承,以使类系统的大多数新功能正常工作。

答案 1 :(得分:2)

不确定为什么你一次使用装饰器形式而不是另一个。最好两次使用它:

class A(object):
    def __init__(self,length=0):
        self._length=length
        self._area=length**2

    @property
    def area(self):
        return self._area

    @property
    def length(self):
        return self._length

    @length.setter
    def setlen(self,x):
        self._length=x
        self.area=x**2

尽管如user2357112所述,问题的根源在于您不是从object继承。