Raymond hettinger showed một cách thực sự mát mẻ để kết hợp các lớp học tập:subclassing từ OrderedDict và defaultdict
from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
pass
# if pickle support is desired, see original post
tôi muốn làm một cái gì đó tương tự cho OrderedDict và defaultdict. Nhưng tất nhiên, defaultdict có chữ ký __init__
khác nhau, vì vậy nó đòi hỏi phải có thêm công việc. Cách sạch nhất để giải quyết vấn đề này là gì? Tôi sử dụng Python 3.3.
Tôi đã tìm thấy một giải pháp tốt ở đây: https://stackoverflow.com/a/4127426/336527, nhưng tôi đã nghĩ rằng có thể xuất phát từ defaultdict có thể làm cho điều này thậm chí còn đơn giản hơn?
Trong khi chúng tôi về chủ đề này, ai đó có thể giải thích cho tôi như thế nào ví dụ OrderedDict thực sự được chức năng OrderedDict mà không có bất kỳ 'super'-delegate rõ ràng đến lớp đó? Có phải vì 'super' gọi một nơi nào đó trong 'Counter' được định tuyến lại thông qua' OrderedDict' thay vì truy cập 'dict' trực tiếp như bình thường không? Hay chỉ là cái gì? –
@KarlKnechtel Bạn có nghĩa là 'OrderedCounter', nhưng câu hỏi hay. – agf
@agf er, vâng, chính xác. Stupid edit timeout ... :( –