2016-10-04 82 views
1

我試圖按照教程上http://www.programiz.com/python-programming/property,並寫了下面的腳本:財產不能發揮預期

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

    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() 

print c.temperature 
c.temperature = 100 
print c.temperature 

當我運行該腳本,我只看到了兩個溫度值:

0 
100 

但是,我希望Getting valueSetting value打印語句也可見。 property不知何故無法正常工作?

+0

的Python 2或Python 3? – khelwood

+0

通過設置c.temperature,你實際上並沒有調用該方法set_temperature但是方法'C .__ setattr__'有以下爲參數的C .__ SETATTR __(「溫度」,100)。所以,你要覆蓋什麼是'__setattr__'方法 – dnalow

+2

如果是Python 2中,問題是,你的類不從'object'繼承,因此它是一箇舊式的類。將第一行更改爲'class Celsius(object):' – khelwood

回答

2

你想做的事情只適用於新式課堂。在Python 2聲明一個新式類,你需要有

class Celsius(object): 

代替

class Celsius: 

在Python 3,所有的類都是新型的,所以class Celsius正常工作的平原。

1

的代碼應該工作原樣,但你的Python混合2語法與Python 3


如果你把print報表類外進入函數調用,代碼工作罰款有效的Python 3

如果你運行該像Python 2的代碼,那麼你必須從object繼承類,並保持所有其他的事情原樣。


選擇一個。

1

你需要定義類,因爲這:

class Celsius(object): 
    balabala 
    balabala