Mein erster Versuch, die Merkmale von zwei Wörterbücher der collections
Modul zu verbinden war eine Klasse zu erstellen, die sie erbt:Warum kann ich ein standardmäßiges, geordne- tes Diktat nicht durch Erben von OrderedDict und defaultdict erstellen?
from collections import OrderedDict, defaultdict
class DefaultOrderedDict(defaultdict, OrderedDict):
def __init__(self, default_factory=None, *a, **kw):
super().__init__(default_factory, *a, **kw)
Allerdings kann ich ein Element in diesem Wörterbuch nicht abtreten:
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'
In der Tat hat this question about how to create a similar object Antworten, die es erreichen, indem Sie die Klasse OrderedDict
erweitern und die zusätzlichen Methoden, die defaultdict
bereitgestellt werden, manuell erneut implementieren. Die Verwendung der Mehrfachvererbung wäre sauberer. Warum funktioniert es nicht?
Sie können 'defaultdict (int)' anstelle von 'defaultdict (lambda: 0)' verwenden. –