__setattr__ para locals()
Chema Cortes
pych3m4 en gmail.com
Jue Nov 29 04:18:52 CET 2007
El 28/11/07, Milton Galo Patricio Inostroza Aguilera
<minoztro en gmail.com> escribió:
> Gracias Chema por tus indicaciones...los muchachos de la universidad
> de chile igual tuvieron que utilizar el bytecode de java para lograr
> su objetivo...yo quería lograr que a través de programación se pudiera
> hacer la instrumentación de código pero como me han dicho y me he
> podido dar cuenta esto no se puede hacer para las variables
> locales...así que ahora a estudiar el bytecode de python
Necesitaría conocer algo más de lo que buscas hacer antes de perder
tiempo en hacerte algún ejemplo con bytecodes. De momento, mira este
código para empezar:
import sys
import dis
class MyDict(dict):
def __setitem__(self,k,v):
print k,"=",v
dict.__setitem__(self,k,v)
def update(self,d):
for k,v in d.items():
if not self.has_key(k) or self[k]<>d[k]:
self[k]=v
class MyTrace:
def __init__(self,locals={}):
self.locals=MyDict(locals)
def mytrace(self,frame,evt,arg):
locals=frame.f_locals
lineno=frame.f_lineno
code=frame.f_code
if evt=="call":
print "Entrando en '%s'"%code.co_name
print "Variables locales",code.co_varnames
dis.disassemble(code,frame.f_lasti)
return MyTrace(locals).mytrace
elif evt=="line":
print "linea",lineno,": ",
self.locals.update(locals)
print
return self.mytrace
elif evt=="return":
print "Retorna",arg
mytrace=MyTrace()
sys.settrace(mytrace.mytrace)
def clausura(i):
x=i
y=x*2
z=[y]*10
return 1
clausura(100)
_______________________________________________
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