2017-06-25 66 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