Python super: Basisklassenmethode ruft eine andere Methode auf

Ich stieß auf dieses unerwartete Verhalten mit Python super , also dachte ich, ich würde fragen. Ich bin mir der grundlegenden super Nutzung bewusst, aber ich möchte jemanden mehr über mein Problem hier ausarbeiten. Betrachten Sie den Code:

 class Base (object): def f1 (self): print 'Base f1' def f2 (self): print 'Base f2' self.f1() class Derived (Base): def f1 (self): print 'Derived f1' def f2 (self): print 'Derived f2' super(Derived, self).f2() 

Der Aufruf von Abgeleitete () f2 () ergibt:

 Derived f2 Base f2 Derived f1 

Ich hatte eher erwartet:

 Derived f2 Base f2 Base f1 

Sollte der Aufruf "self.f1 ()" in Base.f2 () nicht dazu führen, dass Base.f1 () aufgerufen wird?

One Solution collect form web for “Python super: Basisklassenmethode ruft eine andere Methode auf”

self in allen Fällen ist immer noch die Derived Instanz .

super() findet die overriden-Methode und bindet sie an sich self , du tauscht keine Klassen aus. super(Derived, self).f2 findet die nächste f2 Methode auf der super(Derived, self).f2 und bindet das an sich self . Wenn ich dann angerufen werde, ist self immer noch die gleiche Instanz, und das Aufrufen von f1 auf sich self Derived.f1 .

  • Verschiedene Möglichkeiten zur Verwendung von __init__ für PyQt4
  • Den Setzer einer Superklasse in einem Mixin anrufen
  • Verwendung von Python 3 super ()
  • Python selbst und super in Mehrfachvererbung
  • In Bezug auf Python MRO und wie super () verhält sich
  • Python Super-Methode und rufen Alternativen
  • Unterschied zwischen Super- und übergeordneter Klassenname
  • Muss, um einige Basisklassen Verhalten in einem Python-Test Fall zu verspotten
  • Python super (Klasse, Selbst) .method vs super (Elternteil, Selbst)
  • Verständnis Python super () mit __init __ () Methoden [duplizieren]
  • Super () und @staticmethod interaktion
  • Python ist die beste Programmiersprache der Welt.