我对如何在此属性修饰代码中获取和设置温度感到困惑。这是使用属性装饰器的正确方法吗?但是我不知道如何使用它。我可以调用c.temperature并返回初始值(0或我用于实例化类的任何东西)但之后我无法使用set_temperature()设置温度。我看了几个关于这个主题的SO答案,但可能忽略了这一点。
class Celsius:
def __init__(self, temperature=0):
self._temperature = temperature
def to_f(self):
return self._temperature * 1.8 + 32
@property
def temperature(self):
print "Celsius:get_temperature"
return self._temperature
@temperature.setter
def temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is impossible")
print "Celsius:set_temperature"
self._temperature = value
答案 0 :(得分:3)
属性允许您挂钩属性访问,设置属性。分配给属性时会调用setter:
c = Celsius(20)
c.temperature = 40
但请注意,在Python 2中,您需要继承object
才能使该属性生效:
class Celsius(object):
演示:
>>> c = Celsius(20)
>>> c.temperature
Celsius:get_temperature
20
>>> c.temperature = 40
Celsius:set_temperature
>>> c.temperature
Celsius:get_temperature
40