吸气剂和二传手的物业装饰

时间:2017-06-25 18:16:04

标签: python properties decorator python-decorators

我对如何在此属性修饰代码中获取和设置温度感到困惑。这是使用属性装饰器的正确方法吗?但是我不知道如何使用它。我可以调用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

1 个答案:

答案 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