我想创建一个继承自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
答案 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)