nỗ lực đầu tiên của tôi kết hợp các tính năng của hai bộ từ điển trong các mô-đun collections
là tạo ra một lớp kế thừa họ:Tại sao tôi không thể tạo dict mặc định, đặt hàng bằng cách kế thừa OrderedDict và defaultdict?
from collections import OrderedDict, defaultdict
class DefaultOrderedDict(defaultdict, OrderedDict):
def __init__(self, default_factory=None, *a, **kw):
super().__init__(default_factory, *a, **kw)
Tuy nhiên, tôi không thể gán một mục vào từ điển này:
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'
Thật vậy, this question about how to create a similar object có câu trả lời đạt được nó bằng cách mở rộng lớp OrderedDict
và tự thực hiện lại các phương thức bổ sung được cung cấp defaultdict
. Sử dụng nhiều thừa kế sẽ được sạch hơn. Tại sao nó không hoạt động?
bạn có thể sử dụng 'defaultdict (int)' thay vì 'defaultdict (lambda: 0)'. –