__setattr__ para locals()

Chema Cortes pych3m4 en gmail.com
Mie Nov 28 15:54:58 CET 2007


El 28/11/07, Milton Galo Patricio Inostroza Aguilera
<minoztro en gmail.com> escribió:

>    Si te fijas en metodo_ejemplo tengo una variable local llamada "x"
> y me gustaría que al asignarla o modificar su valor pasara lo mismo
> que cuando lo hago con el atributo a {self.a}.
>
>    En realidad lo que quiero hacer es trata de construir un prototipo
> que realice debugger omnisciente a script's escritos en el lenguaje
> python {en la universidad de chile ya han logrado construir uno para
> java}, quizás tu sepas algo más del tema y me puedas guiar con
> implementaciones ya realizadas...gracias por vuestra ayuda y disculpa
> mi insistencia en el tema.

Sólo puedo darte algunas indicaciones. Estamos hablando de un lenguaje
dinámico, donde se debe asumir que los objetos tienen vida propia más
allá de los límites de la ejecución de nuestro programa (no como hacen
lenguajes estáticos como java).

Un buen sitio por donde empezar sería estudiar el bytecode de python
(en la documentación estándar) donde se observa lo siguiente:

- hay instrucciones para guardar y leer objetos "globales"
(STORE_GLOBAL/LOAD_GLOBAL)
- las variables locales están asociadas a las "clausuras" (MAKE_CLOSURE)
- el acceso a las variables locales se hace a través de un índice al
stack (STORE_FAST/LOAD_FAST)

A partir de estas consideraciones, deberías asignar, mediante
sys.settrace, una función "hook" global (o threading.settrace en
multihilo) que controle la ejecución de las clausuras, y leer de
sys.exec_info y sys.exc_traceback, y de func_code.co_* lo que está
pasando.


Es bastante complejo. Si te pierdes, podría mirarlo con más
detenimiento. Nunca me he puesto a hacer nada parecido, pero estoy
totalmente convencido que se puede hacer cualquier tipo de
"introspección" en la ejecución de un script de python.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es