我第一次尝试在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'
实际上,这个关于如何创建类似对象的问题有一些答案通过扩展 OrderedDict
类并手动重新实现提供的 defaultdict
的其他方法来实现它。使用多重继承会更清晰,但为什么不行呢?
defaultdict(int)
д»Јжӣҝdefaultdict(lambda: 0)
гҖӮ - 1''