2017-06-25 15 views
1

このプロパティで装飾されたコードの温度を取得して設定する方法について少し混乱します。これは、プロパティデコレータを使用する正しい方法ですか?しかし、私はそれを使用する方法がわかりません。私はc.temperatureを呼び出すことができ、初期値(0またはクラスをインスタンス化するために使用したもの)を返しますが、その後はset_temperature()を使用して温度を設定できません。私はこのトピックについての2つのSO答えを見たが、おそらくその点を見逃していた。getterとsetter用のプロパティデコレータ

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

プロパティは、属性アクセスをフックすることができます、と属性を設定します。プロパティが機能するためにはPython 2には、あなたがobjectから継承する必要があることが

c = Celsius(20) 
c.temperature = 40 

注:あなたが属性に割り当てるときにセッターが呼び出され

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

関連する問題