Estoy depurando algún código y quiero saber cuándo se accede a un diccionario en particular. Bueno, en realidad es una clase que subclase dict
e implementa un par de características adicionales. De todos modos, lo que me gustaría hacer es crear la subclase dict
y agregar el reemplazo __getitem__
y __setitem__
para producir algún resultado de depuración. En este momento, no tengoCómo subclasificar adecuadamente el dictado y anular __getitem__ & __setitem__
class DictWatch(dict):
def __init__(self, *args):
dict.__init__(self, args)
def __getitem__(self, key):
val = dict.__getitem__(self, key)
log.info("GET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
return val
def __setitem__(self, key, val):
log.info("SET %s['%s'] = %s" % str(dict.get(self, 'name_label')), str(key), str(val)))
dict.__setitem__(self, key, val)
'name_label'
es una clave que eventualmente pueden establecer que quiero usar para identificar la salida. Luego cambié la clase que estoy instrumentando a la subclase DictWatch
en lugar de dict
y cambié la llamada al superconstructor. Aún así, nada parece estar sucediendo. Pensé que estaba siendo inteligente, pero me pregunto si debería ir en otra dirección.
¡Gracias por la ayuda!
¿Intentó utilizar imprimir en lugar de registrar? Además, ¿podría explicar cómo se crea/configura el registro? – pajton
¿No 'dict .__ init__' toma' * args'? –
Parece un poco como un buen candidato para un decorador. –