2014-09-01 76 views
0

我會通過以下網站上的解釋和例子:Python的屬性不會像預期的那樣

http://www.programiz.com/python-programming/property

它似乎如預期,當我嘗試它的代碼並不表現。所以我嘗試做的是執行以下操作:

class Celsius: 
    def __init__(self, temperature = 0): 
     self.temperature = temperature 

    def to_fahrenheit(self): 
     return (self.temperature * 1.8) + 32 

    def get_temperature(self): 
     print("Getting value") 
     return self._temperature 

    def set_temperature(self, value): 
     if value < -273: 
      raise ValueError("Temperature below -273 is not possible") 
     print("Setting value") 
     self._temperature = value 

    temperature = property(get_temperature,set_temperature) 

c = Celsius() 

而且我會想到要爲上述網站上描述的輸出:

Setting value #That means that "set_temperature" was called by the constructor when the object is being created 

但是我得到任何輸出。程序運行時沒有錯誤,但屏幕仍然是空的。 有什麼我做錯了嗎?

回答

3

屬性僅適用於新式類。你的Celsius類需要繼承object

另外請注意,這是更地道,這些天將屬性寫作爲裝飾:

class Celsius(object): 
    def __init__(self, temperature = 0): 
     self.temperature = temperature 

    def to_fahrenheit(self): 
     return (self.temperature * 1.8) + 32 

    @property 
    def temperature(self): 
     print("Getting value") 
     return self._temperature 

    @temperature.setter 
    def set_temperature(self, value): 
     if value < -273: 
      raise ValueError("Temperature below -273 is not possible") 
     print("Setting value") 
     self._temperature = value 
+0

感謝您的回答和您的意見。 – 2014-09-01 07:00:01

1

Python 2.7版仍然採用默認的「老式類」。這個例子適用於以下類型的新款式:

class Celsius(object): 
相關問題