从OrderedDict和defaultdict继承子类

max*_*max 11 python collections multiple-inheritance python-3.x

Raymond Hettinger 展示了一种非常酷的方式来组合集合类:

from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
  pass
# if pickle support is desired, see original post
Run Code Online (Sandbox Code Playgroud)

我想为OrderedDict和defaultdict做类似的事情.但是,当然,defaultdict有不同的__init__签名,因此需要额外的工作.解决这个问题最简洁的方法是什么?我使用Python 3.3.

我在这里找到了一个很好的解决方案:https://stackoverflow.com/a/4127426/336527,但我想可能从defaultdict中获得可能会使这更简单?

agf*_*agf 7

OrderedDict您链接到的答案中继承是最简单的方法.实现有序存储比从工厂函数获取默认值要多得多.

您需要实现的defaultdict只是一些自定义__init__逻辑和非常简单__missing__.

如果您继承defaultdict,则必须至少委托或重新实现__setitem__,__delitem____iter__重现有序操作.您仍然需要进行设置工作__init__,尽管您可能可以继承或根据您的需要省略其他一些方法.

查看原始配方其他任何与其他Stack Overflow问题相关联的问题,了解其中包含的内容.