Je suis en train de déboguer un code et je veux savoir quand un dictionnaire particulier est consulté. En fait, il s'agit d'une classe qui sous-classe dict
et met en œuvre quelques fonctionnalités supplémentaires. Quoi qu'il en soit, ce que j'aimerais faire, c'est sous-classer dict
et ajoutez une dérogation __getitem__
y __setitem__
pour produire des résultats de débogage. Pour l'instant, j'ai
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'
est une clé qui sera éventuellement définie et que je souhaite utiliser pour identifier la sortie. J'ai ensuite modifié la classe que j'instrumente pour qu'elle devienne la sous-classe DictWatch
au lieu de dict
et a modifié l'appel au superconstructeur. Pourtant, rien ne semble se passer. Je pensais être malin, mais je me demande si je ne devrais pas prendre une autre direction.
Merci pour votre aide !
0 votes
Avez-vous essayé d'utiliser print au lieu de log ? Aussi, pourriez-vous expliquer comment vous créez/configurez votre journal ?
3 votes
N'est pas
dict.__init__
prendre*args
?4 votes
Il ressemble un peu à un bon candidat pour un décorateur.