Maximaler Rekursionstiefehler in Python beim Aufruf von super's init.

8

Ich habe eine Klassenhierarchie A & lt; - B & lt; - C, in B brauche ich etwas Verarbeitung im Konstruktor, also habe ich diesen Code aus diesem Beitrag erstellt: Verstehen Python Super () mit __init __ () Methoden

%Vor%

Allerdings habe ich einen Laufzeitfehler von maximaler Rekursion überschritten

%Vor%

Was könnte falsch sein?

    
prosseek 28.09.2015, 20:22
quelle

2 Antworten

6

Zunächst zu beachten: C erbt Konstruktor von B (weil es nicht in C definiert ist).

Zweite Sache zu beachten: self.__class__ in __init__ Aufruf in C-Klasse ist C, nicht B.

Lassen Sie uns analysieren:

  • C().__init__ ruft super(self.__class__, self).__init__(v, v2) auf, in das aufgelöst wird super(C, self).__init__(v, v2) , was B.__init__(self, v, v2) bedeutet.
  • Das erste Argument, das an B.__init__ übergeben wurde, hat den Typ C . super(self.__class__, self).__init__(v, v2) wird wieder in B.__init__(self, v, v2) aufgelöst.
  • Und wieder und wieder und wieder. Und da ist deine unendliche Rekursion.
Łukasz Rogalski 28.09.2015, 20:32
quelle
1

Wenn der erste Parameter von super als Klassenname angegeben wird, wird dieses Problem gelöst.

%Vor%     
prosseek 28.09.2015 20:26
quelle