¿Por qué OrderedDict no usa super?

Podemos crear unOrderedCounter trivialmente mediante el uso de herencia múltiple:

>>> from collections import Counter, OrderedDict
>>> class OrderedCounter(Counter, OrderedDict): 
...     pass
...
>>> OrderedCounter('Mississippi').items()
[('M', 1), ('i', 4), ('s', 4), ('p', 2)]

Corrígeme si me equivoco, pero esto se basa fundamentalmente en el hecho de queCounter usossuper:

class Counter(dict):
    def __init__(*args, **kwds):
        ...
        super(Counter, self).__init__()
        ...

Es decir, el truco de magia funciona porque

>>> OrderedCounter.__mro__
(__main__.OrderedCounter,
 collections.Counter,
 collections.OrderedDict,
 dict,
 object)

lossuper la llamada debe delegar de acuerdo con 'hermanos antes de la regla de los padresmro, donde la clase personalizada usa unOrderedDict como el backend de almacenamiento.

Sin embargo, un colega señaló recientemente, para mi sorpresa, queOrderedDict no lo hace usar super:

def __setitem__(self, key, value,
                dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link):
    ... 
    # <some weird stuff to maintain the ordering here>
    dict_setitem(self, key, value)

Al principio pensé que podría ser porqueOrderedDict llegó primero y Raymond no se molestó en cambiarlo más tarde, pero parece quesuper anterioresOrderedDict.

Por queOrderedDict llamadadict.__setitem__ ¿explícitamente?

¿Y por qué necesita ser un kwarg? ¿Esto no causa problemas al usarOrderedDict en situaciones de herencia de diamantes, ya que pasa directamente a la clase principal en lugar de delegar a la siguiente en la línea del mro?

Respuestas a la pregunta(1)

Su respuesta a la pregunta