[Python-de] getter/setter für python Klassen?

Bastian Venthur venthur at debian.org
Mi Jul 18 10:39:52 UTC 2007


On 18.07.2007 12:09 schrieb Andreas Jung:
> --On 18. Juli 2007 12:04:53 +0200 Bastian Venthur
> <venthur at debian.org> wrote:
>> ich hab irgendwo mal was über getter/setter für Python-Klassen gelesen.
>> Irgendwie konnte man
>>
>>     instanz.variable = "foo"
>>
>> machen und intern wurde aber eine Setterfunktion aufgerufen. Sowas
>> könnte ich jetzt gut gebrauchen. Weis jemand wie das nochmal ging, bzw.
>> wo ich das nachlesen kann? Ich glaube es hatte irgendwas mit Decorators
>> zu tun, mit denen hab ich aber bisher noch nie gearbeitet.
> 
> "Python Properties" sind Deine magischen Suchbegriffe:

Danke, properties hab ich gesucht. Da ich aber ziemlich viele
Klassenvariablen habe würde diese Lösung meine Klasse allerdings unnötig
aufblähen.

Eigentlich würde ich beim setzen (irgend)einer Klassenvariable nur eine
Variable "dirty" auf False setzen wollen und bei der __str__-Methode je
nach dirtyness entscheiden ob ich einen zuvor generierten string
zurückgebe oder neu generieren muss:

    def __str__(self):
        if not self.dirty:
            return self.s
        else:
            self.s = some_complicated_method_returning_a_string()
            self.dirty = false
            return self.s


Gibt es ne Möglichkeit bei jedem Schreibzugriff auf eine Klassenvariable
eine bestimmte Funktion auszuführen?


Schöne Grüße,

Bastian


-- 
Bastian Venthur                                      http://venthur.de
Debian Developer                                 venthur at debian org