Jak podklasować OrderedDict?
Podklasowanie Pythonadict
działa zgodnie z oczekiwaniami:
>>> class DictSub(dict):
... def __init__(self):
... self[1] = 10
...
>>> DictSub()
{1: 10}
Jednak robienie tego samego za pomocącollections.OrderedDict
nie działa:
>>> import collections
>>> class OrdDictSub(collections.OrderedDict):
... def __init__(self):
... self[1] = 10
...
>>> OrdDictSub()
(…)
AttributeError: 'OrdDictSub' object has no attribute '_OrderedDict__root'
W ten sposób implementacja OrderedDict używa prywatnego__root
atrybut, który uniemożliwia podklasęOrdDictSub
od zachowywania się jakDictSub
podklasa. Czemu? Jak można odziedziczyć po OrderedDict?