最佳答案
如何使dict的子类尽可能“完美”?最终目标是有一个简单的dict,其中键是小写的。
似乎应该有一些我可以覆盖的基本集合来实现这个工作,但根据我所有的研究和尝试,情况似乎并非如此:
如果我覆盖__getitem__
/__setitem__
,那么get
/set
不工作。我怎样才能使它们发挥作用呢?当然,我不需要单独实现它们?
我阻止酸洗工作,我需要实现__setstate__
等?
我是否应该使用使用mutablemapping(似乎不应该使用UserDict
或DictMixin
) ?如果有,怎么做?文档并不是很有启发性。
这是我的第一次尝试,get()
不工作,毫无疑问还有许多其他小问题:
class arbitrary_dict(dict):
"""A dictionary that applies an arbitrary key-altering function
before accessing the keys."""
def __keytransform__(self, key):
return key
# Overridden methods. List from
# https://stackoverflow.com/questions/2390827/how-to-properly-subclass-dict
def __init__(self, *args, **kwargs):
self.update(*args, **kwargs)
# Note: I'm using dict directly, since super(dict, self) doesn't work.
# I'm not sure why, perhaps dict is not a new-style class.
def __getitem__(self, key):
return dict.__getitem__(self, self.__keytransform__(key))
def __setitem__(self, key, value):
return dict.__setitem__(self, self.__keytransform__(key), value)
def __delitem__(self, key):
return dict.__delitem__(self, self.__keytransform__(key))
def __contains__(self, key):
return dict.__contains__(self, self.__keytransform__(key))
class lcdict(arbitrary_dict):
def __keytransform__(self, key):
return str(key).lower()