Mehrfachvererbung in Python
Vererbung ermöglicht uns die Verwendung von Elternklassenmerkmalen in einer Kindklasse und ist ein wesentliches Merkmal der objektorientierten Programmierung. Es hilft bei der Wiederverwendbarkeit und Transitivität von Daten von der übergeordneten Klasse zur untergeordneten Klasse und gleicht Datenverluste aus.
Mehrfachvererbung liegt vor, wenn die untergeordnete Klasse die Methoden und Funktionen von zwei oder mehr übergeordneten Klassen erbt. Es ist von Vorteil, alle Daten auf einmal abzuleiten. Auf der anderen Seite geht es jedoch mit der Komplexität und Mehrdeutigkeit der Nutzung einher. Es ist mehrdeutig zu sagen, welches Merkmal von welchem Elternteil stammt, wenn mehrere Eltern das gleiche Merkmal besitzen. Es tritt auf, wenn Mehrfachvererbung nicht richtig verwendet oder implementiert wird. Virtuelle Vererbung, die Verwendung von Method Resolution Order (MRO) und die Funktion super()
können die Risiken irgendwie reduzieren.
Im folgenden Code sehen wir ein grundlegendes Beispiel für Mehrfachvererbung.
class Father:
def drive(self):
print("Father drives his son to school")
class Mother:
def cook(self):
print("Mother loves to cook for her son")
class Son(Father, Mother):
def love(self):
print("I love my Parents")
c = Son()
c.drive()
c.cook()
c.love()
Ausgabe:
Father drives his son to school
Mother loves to cook for her son
I love my parents
Die Kindklasse Son
leitet sich von den Elternklassen Father
und Mother
ab, wodurch sie die Funktionen drive()
und cook()
verwenden kann, um die gewünschte Ausgabe zu erzielen.
Die Funktion super()
bezieht sich auf die Eltern- oder Geschwisterklasse in der geerbten Kindklasse und gibt ein temporäres Objekt zurück, das es der Kindklasse ermöglicht, alle Methoden der Superklasse zu verwenden.
Dies geschieht normalerweise im Fall von Mehrdeutigkeiten, wenn die Vererbung beginnt, sich zu kreuzen, d. h. wenn die beiden Elternklassen auch von der Superbasisklasse abgeleitet werden.
Beispielsweise,
class Animals:
def __init__(self, animalsName):
print(animalsName, "is an animal.")
class Mammal(Animals):
def __init__(self, Name):
print(Name, "is a mammal.")
super().__init__(Name)
class donotFly(Mammal):
def __init__(self, name):
print(name, "cannot fly.")
super().__init__(name)
class donotSwim(Mammal):
def __init__(self, name):
print(name, "cannot swim.")
super().__init__(name)
class Cat(donotSwim, donotFly):
def __init__(self):
print("A cat.")
super().__init__("Cat")
cat = Cat()
print("")
bat = donotSwim("Bat")
Ausgabe:
A cat.
Cat cannot swim.
Cat cannot fly.
Cat is a mammal.
Cat is an animal.
Bat cannot swim.
Bat is a mammal.
Bat is an animal.
Es wird eine Kinderklasse Cat
erstellt, die von den beiden Elternklassen donotswim
und donotfly
vererbt wird. Dann erbt die Klasse der Säugetiere sie selbst. Die Klasse Mammals
erbt zudem die Eigenschaften der Oberklasse Animals
. Daher haben wir in diesem Fall die Funktion super()
verwendet, um einfach auf die Methoden der Oberklasse zuzugreifen.