[Python-de] Einklinken beim Zugriff auf eine bestimmte Variable

Hans-Peter Jansen hpj at urpla.net
Mon Aug 29 13:21:56 CEST 2005


Am Montag, 29. August 2005 00:07 schrieb Christian Junker:
> Hallo miteinander,
>
> letztens hatte ich die Diskussion mit einem Kollegen welche Sprache
> mächtiger ist:
> Tcl oder Python.
>
> Da ich Tcl zuvor nur vom Hörensagen kannte, und nichts weiter wusste
> als dass in Tcl alle Variablen Strings sind, war ich sehr überrascht
> als dieser mir zeigte wie elegant manche Dinge gemacht werden
> konnten. Jedenfalls fand ich den Tcl 'trace' Befehl unglaublich
> bemerkenswert, der es u.a. möglich macht das Verhalten einer
> Variablen in bestimmten Situationen komplett zu steuern, und zwar
> indirekt.
> Man kann z.B. eine Funktion schreiben die immer dann ausgeführt wird,
> wenn diese eine Variable (die vorher natürlich bekannt sein muss,
> also zuvor definiert sein muss) irgendwo eingelesen wird.
>
> D.h. muss ein Statement die Variable x - oder besser deren Value -
> lesen, so wird direkt vor dieser Operation die mit trace registrierte
> selbst geschriebene Funktion aufgerufen, die dann z.B. eine Warnung
> nach stdout ausspucken kann.

schau dir mal sys.settrace(func) an.. 

> Ein Vergleichsfeature in Python fiel mir daraufhin nicht ein, ich
> hatte nur die spezielle Methode __getattr__ im Kopf und den
> property(...) Mechanismus, aber das Problem bei ihnen ist, dass sie
> 1.) nicht eine bestimmte Variable unter die Lupe nehmen können und
> 2.) nur für Attribute einer Klasse gelten.
>
> Gibt es überhaupt soetwas in Python und wenn ja wie heißt die
> Funktion dazu? (ich hoffe, ich habe nichts offensichtliches
> übersehen)

Hmm, eine Sprache nach Implementierungsdetails (hier den trace 
Möglichkeiten) zu beurteilen, kommt mir so vor, wie ein Fahrrad nach 
der Anzahl der Speichen einzuordnen..

Pete