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

Diez B. Roggisch deets at web.de
Mon Aug 29 11:54:29 CEST 2005


> 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.
>
> 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)

nicht das ich wuesste. Ob dieses Feature aber die Frage nach der 
Sprachueberlegenheit beantwortet - das halte ich doch fuer uebetrieben. 

AFAIK kennt TCL keine Objekte, der Verzicht auf starke typisierung ist auch 
ein Manko, und zB mehrdimensionale dicts lassen sich nur ueber composite-keys 
machen - also zb "1x2", als string! Echte listen gibt's auch nicht, sondern 
eben dicts die mit Zahlen indiziert sind... usw. Alles in allem doch eine 
deutlich primitivere Sprache.

MfG Diez