Het subclasseren van een Python dict
werkt zoals verwacht:
>>> class DictSub(dict):
... def __init__(self):
... self[1] = 10
...
>>> DictSub()
{1: 10}
Hetzelfde doen met een collections.OrderedDict
werkt echter niet:
>>> import collections
>>> class OrdDictSub(collections.OrderedDict):
... def __init__(self):
... self[1] = 10
...
>>> OrdDictSub()
(…)
AttributeError: 'OrdDictSub' object has no attribute '_OrderedDict__root'
De implementatie van OrderedDict maakt dus gebruik van een private __ root
atribute, die voorkomt dat de subklasse OrdDictSub
zich gedraagt als de DictSub
-subklasse. Waarom? Hoe kan iemand erven van een OrderedDict?