0Pricing
Python Academy · Lektion

Mehrfachvererbung und MRO

Verstehen Sie Mehrfachvererbung und die MRO von Python (C3-Linearisierung).

Mehrfachvererbung und MRO ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

Python unterstützt Mehrfachvererbung. Die Method Resolution Order (MRO) legt fest, welche Methode aufgerufen wird, wenn Namen kollidieren.

Syntax der Mehrfachvererbung

class C(A, B): erbt sowohl von A als auch von B. C erhält alle Methoden von beiden.
class A:
    def hello(self): return 'A'
class B:
    def world(self): return 'B'
class C(A, B): pass
c = C()
print(c.hello(), c.world())

Method Resolution Order (MRO)

Die MRO definiert die Suchreihenfolge. C.__mro__ zeigt die Reihenfolge: C, A, B, object. Die erste Klasse mit einer passenden Methode gewinnt.
class A:
    def greet(self): return 'A'
class B:
    def greet(self): return 'B'
class C(A, B): pass
print(C().greet())  # A wins
print(C.__mro__)

C3-Linearisierung

Python verwendet die C3-Linearisierung, um die MRO zu berechnen. Sie garantiert: Unterklasse vor Oberklasse, bei mehreren Basisklassen von links nach rechts.
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print([c.__name__ for c in D.__mro__])

Diamantvererbung

D(B,C), wobei B und C beide von A erben, ist das Diamantproblem. C3 stellt sicher, dass A.__init__ nur einmal aufgerufen wird.
class A:
    def __init__(self): print('A')
class B(A):
    def __init__(self): super().__init__(); print('B')
class C(A):
    def __init__(self): super().__init__(); print('C')
class D(B, C):
    def __init__(self): super().__init__(); print('D')
D()

Mixins

Ein Mixin ist eine für Mehrfachvererbung entwickelte Klasse. Es fügt Methoden hinzu, ohne als vollständige Klasse eigenständig zu sein.
class JSONMixin:
    def to_json(self):
        import json
        return json.dumps(vars(self))
class User(JSONMixin):
    def __init__(self, name, age): self.name,self.age=name,age
print(User('Alice', 30).to_json())

Regeln für das Mixin-Design

Mixins sollten __init__ nicht enthalten, nicht von Nicht-Mixin-Klassen erben und jeweils eine Aufgabe erfüllen. Benennen Sie sie mit dem Suffix Mixin.
class LoggingMixin:
    def log(self, msg): print(f'[{self.__class__.__name__}] {msg}')
class Service(LoggingMixin):
    def run(self): self.log('running')
Service().run()

super() bei Mehrfachvererbung

super() ruft die nächste Klasse in der MRO auf, nicht unbedingt die direkte Oberklasse. Für kooperatives Verhalten muss jede Klasse super() aufrufen.
class Base:
    def action(self): return 'Base'
class A(Base):
    def action(self): return 'A->' + super().action()
class B(Base):
    def action(self): return 'B->' + super().action()
class C(A, B):
    def action(self): return 'C->' + super().action()
print(C().action())

type() zum dynamischen Erstellen von Klassen

type('NewClass', (Base,), {'method': fn}) erstellt dynamisch eine Klasse. Das ist für Metaprogrammierung nützlich.
def hello(self): return 'hello'
MyClass = type('MyClass', (object,), {'hello': hello})
print(MyClass().hello())

Die MRO überprüfen

ClassName.__mro__ oder inspect.getmro(ClassName) zeigt die Auflösungsreihenfolge als Tupel von Klassen.
class A: pass
class B(A): pass
class C(B): pass
import inspect
print([c.__name__ for c in inspect.getmro(C)])

Wann Sie Mehrfachvererbung vermeiden sollten

Komplexe Hierarchien mit Mehrfachvererbung sind schwer nachzuvollziehen. Bevorzugen Sie Komposition oder einfache Mixins gegenüber tiefen Hierarchien.
# Prefer:
class User:
    def __init__(self, name, logger):
        self.name = name
        self.logger = logger  # composition
print('composition preferred')

Kurzer Test

Welchen Algorithmus verwendet Python, um die Method Resolution Order zu berechnen?

Zusammenfassung

Mehrfachvererbung: class C(A, B). Die MRO wird mithilfe der C3-Linearisierung bestimmt und legt die Methodensuche fest. Verwenden Sie Mixins für eine übersichtliche Mehrfachvererbung. super() folgt der MRO.

Weiter so

Hervorragender Fortschritt! Fahren Sie fort, um das nächste Konzept zu meistern.

Häufig gestellte Fragen

Ist die Lektion „Mehrfachvererbung und MRO“ kostenlos?

Ja — der vollständige Text von „Mehrfachvererbung und MRO“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Mehrfachvererbung und MRO“?

Verstehen Sie Mehrfachvererbung und die MRO von Python (C3-Linearisierung). Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Mehrfachvererbung und MRO“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einfache Vererbung
  2. Methodenüberschreibung und super()
  3. Mehrfachvererbung und MRO
  4. Polymorphie und Duck-Typing
← Zurück zu Python Academy