雷蒙德·海廷格 showed一种非常酷的组合集合类的方法:
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
,则必须委托(delegate)或重新实现至少 __setitem__
、__delitem__
和 __iter__
重现顺序操作。您仍然需要在 __init__
中进行设置工作,尽管您可以根据需要继承或简单地省略一些其他方法。
看看the original recipe或 any of the others linked to from another Stack Overflow question对于这将需要什么。
关于python - 从 OrderedDict 和 defaultdict 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951927/