有没有更好的方法来创建一个类,它是`dict`的子类但不区分大小写?

时间:2013-12-12 12:22:32

标签: python

我想创建一个继承自dict类型的类,但可以使用不区分大小写的键来访问数据。我实现了一个简单的但我不认为使用instance.__dict__变量是一种正确的方法 有更好的方法吗?

这是我的代码:

class MyDict(dict):
    def __init__(self, *args, **kwargs):
        if args:
            for k, v in args[0].iteritems():
                self.__dict__.update({k.lower(): v})

    def __getitem__(self, k):
        return self.__dict__.get(k.lower())

    def __setitem__(self, k, v):
        self.__dict__.update({k.lower(): v})

    def __delitem__(self, k):
        self.__dict__.pop(k, None)


if __name__ == '__main__':
    test_0 = MyDict({'naME': 'python', 'Age': 24})
    print(test_0['name'])    # return 'python'
    print(test_0['AGE'])     # return 24

    test_1 = MyDict()
    test_1['StaCk'] = 23
    print(test_1['stack'])   # return 23
    print(test_1['STACK'])   # return 23

1 个答案:

答案 0 :(得分:4)

编辑:请参阅Janne Karila的link,其中包含更好的解决方案。

不要使用self .__ dict__,它具有与dict无关的特殊含义,你应该使用super()来调用超类上的相应函数。

如,

def __setitem__(self, k, v):
    if hasattr(k, 'lower'):
        k = k.lower()
    return super(MyDict, self).__setitem__(k, v)