Итак, я следил за Python Super считался вредным и отправился проверять свои примеры.
Однако Пример 1-3, который должен показывать правильный способ вызова super при обработке __init__ методов, которые ожидают разные аргументы, выравнивание не работает.
Это то, что я получаю:
~ $ python example1-3.py 
MRO: ['E', 'C', 'A', 'D', 'B', 'object']
E arg= 10
C arg= 10
A
D arg= 10
B
Traceback (most recent call last):
  File "Download/example1-3.py", line 27, in <module>
    E(arg=10)
  File "Download/example1-3.py", line 24, in __init__
    super(E, self).__init__(arg, *args, **kwargs)
  File "Download/example1-3.py", line 14, in __init__
    super(C, self).__init__(arg, *args, **kwargs)
  File "Download/example1-3.py", line 4, in __init__
    super(A, self).__init__(*args, **kwargs)
  File "Download/example1-3.py", line 19, in __init__
    super(D, self).__init__(arg, *args, **kwargs)
  File "Download/example1-3.py", line 9, in __init__
    super(B, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Похоже, что object сам нарушает одну из лучших практик, упомянутых в документе, то есть методы, которые используют super, должны принимать *args и **kwargs.
Теперь, очевидно, г-н Найт ожидал, что его примеры будут работать, так это то, что было изменено в последних версиях Python? Я проверил 2.6 и 2.7, и он не работает на обоих.
Итак, каков правильный способ решения этой проблемы?