3

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

我正在尝试了解 @property 以及该属性的设置器。从第 199 页第 15 页开始,我尝试了以下示例,但出现错误:

>>> 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
4

1 回答 1

4

您已经在方法中定义了所有__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)

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

于 2013-04-29T04:43:21.890 回答