richtiger Weg super zu benutzen (Argument übergeben)

So war ich nach Python ist Super Schädlichund ging zu testen, seinem Beispiele.

Jedoch Beispiel 1-3die zeigen soll, den richtigen Weg der Berufung super beim Umgang mit __init__ Methoden, die erwarten, dass andere Argumente, flat-out nicht funktioniert.

Dies ist, was ich bekomme:

~ $ 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

Scheint es, dass object selbst gegen eine der besten Praktiken, die in dem Dokument erwähnt werden, dass die Methoden, die super akzeptieren muss *args und **kwargs.

Nun offensichtlich Herr Ritter erwartete, dass seine Beispiele, um zu arbeiten, so ist das etwas, was geändert wurde in den letzten Versionen von Python? Ich habe überprüft, 2.6 und 2.7, und es nicht auf beiden.

Also, was ist der richtige Weg, um mit diesem problem umzugehen?

InformationsquelleAutor der Frage cha0site | 2012-01-23

Schreibe einen Kommentar