Python3 @ Property.setter和Object没有属性

时间:2013-04-29 04:36:13

标签: python object properties python-3.x

我正在通过“Quick Python Book”第二版学习Python对象。我正在使用Python 3

我正在尝试了解@property以及该属性的setter。 从第199页第9章开始,我尝试了这个例子,但是我收到了错误:

>>> class Temparature:
    def __init__(self):
        self._temp_fahr = 0
        @property
        def temp(self):
            return (self._temp_fahr - 32) * 5/9
        @temp.setter
        def temp(self, new_temp):
            self._temp_fahr = new_temp * 9 / 5 + 32


>>> t.temp
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    t.temp
AttributeError: 'Temparature' object has no attribute 'temp'
>>> 

为什么我收到此错误?另外,为什么我不能只使用函数调用和参数设置实例变量new_temp:

t = Temparature()
t.temp(34)

而不是

t.temp = 43

1 个答案:

答案 0 :(得分:3)

您已在__init__方法中定义了所有方法!就像这样取消他们:

class Temparature:
    def __init__(self):
        self._temp_fahr = 0

    @property
    def temp(self):
        return (self._temp_fahr - 32) * 5/9
    @temp.setter
    def temp(self, new_temp):
        self._temp_fahr = new_temp * 9 / 5 + 32

t.temp(34)

不起作用,因为属性为descriptors,并且在这种情况下它们具有查找优先级,因此t.temp会返回您定义的@property