子类化一个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继承?