मेरे पहले दो शब्दकोशों की सुविधाओं गठबंधन करने के लिए 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
प्रदान की गई अतिरिक्त विधियों को मैन्युअल रूप से पुन: कार्यान्वित करते हैं। एकाधिक विरासत का उपयोग क्लीनर होगा। यह क्यों काम नहीं करता है?
एक अलग रूप में के रूप में सही पर वर्गों पर ध्यान नहीं देता अजगर विधि संकल्प क्रम बाएं से दाएं चला जाता है, आप 'डिफ़ॉल्ट डिक्ट (lambda: 0) 'के बजाय' डिफ़ॉल्ट डिक्ट (int) 'का उपयोग कर सकते हैं। –