2017-06-25 9 views
1

Ich bin ein wenig verwirrt darüber, wie man in dieser Eigenschaft eingerichteten Code zu bekommen und einzustellen. Ist das der richtige Weg, den Property Decorator zu benutzen? Ich bin mir jedoch nicht sicher, wie ich es benutzen soll. Ich kann c.temperature aufrufen und es gibt den Anfangswert zurück (0 oder was auch immer ich verwendet habe, um die Klasse zu instanziieren), aber danach kann ich die Temperatur nicht mit set_temperature() einstellen. Ich habe mir ein paar SO-Antworten zu diesem Thema angesehen, aber wahrscheinlich den Punkt verpasst.Property Decorator für Getter und 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

"aber danach kann ich die Temperatur nicht mit set_temperature() einstellen" - warum haben Sie erwartet, dass es etwas namens 'set_temperature' gibt? Du hast nie etwas mit diesem Namen definiert. – user2357112

+0

tatsächlich war es nicht einmal mit nur c.temperature = 10 für zB ich denke, weil ich nicht von Objekt geerbt wurde (wie in der anderen Antwort unten erwähnt) – user3079275

Antwort

3

Eine Eigenschaft können Sie in Attribut Zugriff Haken und das Attribut festlegen. Der Setter aufgerufen wird, wenn Sie auf das Attribut zuweisen:

c = Celsius(20) 
c.temperature = 40 

ist jedoch zu beachten, dass in Python 2, die Sie von object erben müssen für die Eigenschaft arbeiten:

class Celsius(object): 

Demo:

>>> c = Celsius(20) 
>>> c.temperature 
Celsius:get_temperature 
20 
>>> c.temperature = 40 
Celsius:set_temperature 
>>> c.temperature 
Celsius:get_temperature 
40 
+0

Danke, ja, ich habe Python 2.7 - und erbte nicht von Objekt. – user3079275