2017-06-25 21 views
1

我有点困惑如何获得和设置温度在这个属性装饰的代码。这是使用属性装饰器的正确方法吗?但是我不确定如何使用它。我可以调用c.temperature并返回初始值(0或任何我用来实例化类),但之后我无法使用set_temperature()设置温度。我看了几个关于这个话题的答案,但可能没有提到这一点。属性装饰吸尘器和二传手

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

“但之后,我无法使用set_temperature()设置温度” - 为什么你期望有所谓的'set_temperature'?你从未用这个名字来定义任何东西。 – user2357112

+0

实际上它不工作,即使只有c.temperature = 10例如,我想因为我没有继承对象(如下面的其他答案中所述) – user3079275

回答

3

的属性可以给你提供属性的访问,并设置属性。

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 
+0

谢谢,是的,我使用的是Python 2.7 - 而不是从对象继承。 – user3079275