Как создать подкласс OrderedDict?

Создание подкласса Python dictработает, как и ожидалось:

>>> class DictSub(dict):
...     def __init__(self):
...         self[1] = 10
...         
>>> DictSub()
{1: 10}

Однако выполнение того же действия с collections.OrderedDictделает не работает:

>>> import collections
>>> class OrdDictSub(collections.OrderedDict):
...     def __init__(self):
...         self[1] = 10
...         
>>> OrdDictSub()
(…)
AttributeError: 'OrdDictSub' object has no attribute '_OrderedDict__root'

Таким образом, реализация OrderedDict использует закрытый атрибут __root, который не позволяет подклассу OrdDictSubвести себя подобно подклассу DictSub. Почему? Как можно наследовать от OrderedDict?

28
задан Eric O Lebigot 24 June 2012 в 03:35
поделиться