[Python-de] getter/setter für python Klassen?
Stefan Behnel
python-de at behnel.de
Mi Jul 18 11:10:09 UTC 2007
Hallo!
Bastian Venthur wrote:
> 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?
Such mal nach dem "memoize" pattern, ich glaube, das ist das, was du in
Wirklichkeit suchst.
Stefan