[Python-de] Einklinken beim Zugriff auf eine bestimmte Variable
Christian Junker
christianjunker at gmail.com
Mit Sep 21 10:16:26 CEST 2005
Hi Stefan,
Am 11.09.05 schrieb Stefan Schwarzer <sschwarzer at sschwarzer.net>:
> [...]
> es ist immerhin möglich, __getattr__/__setattr__ für eine Klasse zu
> definieren und diese bzw. Instanzen davon in sys.modules einzubinden
> (siehe Rezept von Alex Martelli:
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65207 ). Deiner
> Frage nach suchst du nach einer Verallgemeinerung von Alex's Rezept.
danke vielmals, mit Hilfe dieses Beispiels habe ich mal ein kleines
Code Snippet geschrieben, dass mir zumindest bei Modulattributen - u.
a. Variablen, die an ein Modul gebunden sind - etwas ähnliches wie das
Tcl trace erlaubt.
Das folgende könnte in einer trace.py stehen:
<code>
class _Trace:
_vars = {}
def __setattr__(self,name,val):
#here: call some global function to keep track of write-access
to a variable
self.__class__._vars[name] = val
def __getattr__(self, name):
#here: call some global function to keep track of read-access
to a variable
return self.__class__._vars.get(name, None)
import sys
sys.modules[__name__]= _Trace()
</code>
Da kann man sicherlich noch sehr viel verbessern, aber zumindest
erfüllt es den Zweck *teilweise*: Eine vergleichbare Tcl trace
Funktionalität in purem Python.
Die Einschränkung, dass es nur für Variablen in einem bestimmten Modul
gilt (hier das Modul mit dem Namen "trace"), ist wahrscheinlich auch
noch zu lösen....
--
Best Regards
Christian Junker