如何正确地子类化字典并覆盖 __getitem__ 和 __setitem__ 方法。

6 浏览
0 Comments

如何正确地子类化字典并覆盖 __getitem__ 和 __setitem__ 方法。

我正在调试一些代码,想要找出何时访问了特定的字典。实际上,这是一个继承了dict并实现了一些额外功能的类。无论如何,我想要做的是自己继承dict并覆盖__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'是一个将最终设置的键,我想要用它来标识输出。然后,我将要调试的类更改为继承DictWatch而不是dict,并改变了对超类构造函数的调用。然而,似乎什么都没有发生。我原以为自己很聪明,但我想知道是否应该换个方向。

谢谢帮助!

0