Heim >Backend-Entwicklung >Python-Tutorial >Wie rufe ich die Methoden der übergeordneten Klasse „__init__' bei der Mehrfachvererbung ordnungsgemäß auf?

Wie rufe ich die Methoden der übergeordneten Klasse „__init__' bei der Mehrfachvererbung ordnungsgemäß auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 05:36:10445Durchsuche

How Do I Properly Call Parent Class `__init__` Methods in Multiple Inheritance?

Aufruf der übergeordneten Klasse init mit Mehrfachvererbung

In Szenarien, in denen Mehrfachvererbung verwendet wird, ist es wichtig, dies sicherzustellen Alle Konstruktoren der übergeordneten Klasse werden aufgerufen. Zwei gängige Ansätze sind:

  • ParentClass.__init__(self) (old-style)
  • super(DerivedClass, self).__init__() (neuerer Stil)

Wenn übergeordnete Klassen jedoch nicht einem konsistenten folgen Konvention können diese Ansätze scheitern.

Bestimmen des richtigen Ansatzes

Der geeignete Ansatz hängt davon ab, ob die Basisklassen für Mehrfachvererbung ausgelegt sind:

1. Eigenständige Basisklassen

  • Nicht für Mehrfachvererbung konzipiert.
  • Rufen Sie jeden übergeordneten Konstruktor manuell auf, indem Sie Folgendes verwenden:

    • Ohne super: Foo.__init__(self), Bar.__init__(self)
    • Mit super: super().__init__() (für alle Konstruktoren bis Foo), super(Foo, self).__init__(bar) (für alle Konstruktoren nach Foo)

2. Mixins

  • Entwickelt für Mehrfachvererbung.
  • Verwenden Sie super().__init__() in der Mixin-Klasse, die automatisch den nächsten Konstruktor aufruft.
  • Erben Sie zuerst vom Mixin, z. B. Klasse FooBar(FooMixin, Bar).

3. Für die kooperative Vererbung konzipierte Klassen

  • Ähnlich wie Mixins, aber alle Argumente werden als Schlüsselwortargumente übergeben.
  • Rufen Sie super().__init__() in allen Klassen auf.
  • Reihenfolge der Basisklassen nicht Angelegenheit.

Zusätzliche Überlegungen

  • Vermeiden Sie für Objektunterklassen den Aufruf von super().__init__().
  • Für Standalone Klassen stellen immer einen leeren Konstruktor bereit, wenn sie direkt von einem Objekt erben (z. B. Klasse Base(object): def __init__(self): bestehen).

Letztendlich hängt die korrekte Umsetzung von den beteiligten Klassen ab. Wenn eine Klasse für Mehrfachvererbung konzipiert ist, sollte sie entsprechend dokumentiert werden. Andernfalls gehen Sie davon aus, dass es nicht für solche Szenarien ausgelegt ist.

Das obige ist der detaillierte Inhalt vonWie rufe ich die Methoden der übergeordneten Klasse „__init__' bei der Mehrfachvererbung ordnungsgemäß auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn