我正在通过“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
答案 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
。