Raymond Hettinger 显示 一种非常酷的方式来组合集合类:
from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
pass
# if pickle support is desired, see original post
我想为OrderedDict和defaultdict做类似的事情。但当然,defaultdict有不同之处 __init__
签名,所以需要额外的工作。解决这个问题最简洁的方法是什么?我使用Python 3.3。
我找到了一个很好的解决方案: https://stackoverflow.com/a/4127426/336527,但我想也许从defaultdict得到可能会使这更简单?
继承自 OrderedDict
在你联系的答案中是最简单的方法。实现有序存储比从工厂函数获取默认值更有意义。
所有你需要实现的 defaultdict
有点习惯 __init__
逻辑和极其简单 __missing__
。
如果你改为继承 defaultdict
,你必须至少委托或重新实施 __setitem__
, __delitem__
和 __iter__
重现有序操作。您仍然需要进行设置工作 __init__
虽然您可以继承或根据您的需要简单地省略其他一些方法。
看一眼 原始配方 要么 来自另一个Stack Overflow问题的任何其他链接 这将带来什么。
我找到了一种方法来对它们进行子类化,但不确定是否存在错误:
class OrderedDefaultDict(defaultdict, OrderedDict):
def __init__(self, default, *args, **kwargs):
defaultdict.__init__(self, default)
OrderedDict.__init__(self, *args, **kwargs)