[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