Also folgte ich Pythons Super Considered Harmful und ging, um seine Beispiele zu testen.
Jedoch Beispiel 1-3 , die die richtige Art und Weise des Aufrufs zeigen , sollte superbeim Umgang mit __init__Methoden , die unterschiedlichen Argumente erwarten, flat-out funktioniert nicht.
Das bekomme ich:
~ $ 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
Es scheint, dass objectselbst eine der im Dokument erwähnten Best Practices verletzt wird, nämlich die Methoden, die verwenden supermüssen *argsund **kwargs.
Offensichtlich hat Mr. Knight erwartet, dass seine Beispiele funktionieren. Wurde dies in den letzten Versionen von Python geändert? Ich habe 2.6 und 2.7 überprüft und es schlägt bei beiden fehl.
Was ist der richtige Weg, um mit diesem Problem umzugehen?
object, und sie stellt sicher, dass die objectAufrufe __init__korrekt sind.
__init__on im objectHintergrund alle Parameter in Python 2.5 ignoriert. Dies hat sich in Python 2.6 geändert.