【发布时间】:2015-02-27 00:26:00
【问题描述】:
我第一次尝试在collections 模块中组合两个字典的功能是创建一个继承它们的类:
from collections import OrderedDict, defaultdict
class DefaultOrderedDict(defaultdict, OrderedDict):
def __init__(self, default_factory=None, *a, **kw):
super().__init__(default_factory, *a, **kw)
但是,我无法将项目分配给此词典:
d = DefaultOrderedDict(lambda: 0)
d['a'] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.3/collections/__init__.py", line 64, in __setitem__
self.__map[key] = link = Link()
AttributeError: 'DefaultOrderedDict' object has no attribute '_OrderedDict__map'
确实,this question about how to create a similar object 的答案可以通过扩展OrderedDict 类并手动重新实现defaultdict 提供的其他方法来实现。使用多重继承会更干净。为什么它不起作用?
【问题讨论】:
-
顺便说一句,您可以使用
defaultdict(int)而不是defaultdict(lambda: 0)。
标签: python python-3.x multiple-inheritance defaultdict ordereddictionary