Die Vererbung ist ein mächtiges Konzept in der objektorientierten Programmierung. Sie ist eine Methode, Code zu organisieren, und besonders nützlich, wenn Sie mehrere Klassen haben, die miteinander verwandt sind. Die Vererbung erlaubt es einer Klasse, alle Methoden und Eigenschaften einer anderen Klasse zu übernehmen, was die Wiederverwendbarkeit von Code fördert und logische Beziehungen zwischen Klassen schafft.
Um die Verwendung der Vererbung in Python zu veranschaulichen, betrachten wir als Beispiel einen Zoo. In einem Zoo gibt es verschiedene Tiere wie Hunde, Katzen und Vögel. Obwohl diese Tiere einzigartige Verhaltensweisen haben, teilen sie auch einige gemeinsame Eigenschaften. In solch einem Szenario kann uns die Vererbung helfen, Codewiederholungen zu vermeiden und den Code besser zu strukturieren. Schauen wir uns an, wie das funktioniert:
class Animal: # Definition einer Basisklasse Animal
def __init__(self, name, age): # Konstruktor mit den Parametern name und age
self.name = name # Zuweisung des Attributs name
self.age = age # Zuweisung des Attributs age
def eat(self): # Gemeinsame Methode eat
return f'{self.name} is eating.'
def make_sound(self): # Gemeinsame Methode make_sound
return f'{self.name} makes a sound.'
class Dog(Animal): # Definition der Klasse Dog, die von Animal erbt
def make_sound(self): # Überschreiben der Methode make_sound
return f'{self.name} barks.'
class Cat(Animal): # Definition der Klasse Cat, die von Animal erbt
def make_sound(self): # Überschreiben der Methode make_sound
return f'{self.name} meows.'
class Bird(Animal): # Definition der Klasse Bird, die von Animal erbt
def eat(self): # Überschreiben der Methode eat für Bird
return f'{self.name} is pecking at its food.'
def make_sound(self): # Überschreiben der Methode make_sound
return f'{self.name} chirps.'
# Die Methode __init__ wird von Animal geerbt
# aber Sie können auch eine __init__ für jede der abgeleiteten Klassen definieren
dog = Dog('Rex', 5) # Erstellen einer Instanz von Dog
cat = Cat('Whiskers', 3) # Erstellen einer Instanz von Cat
bird = Bird('Tweety', 2) # Erstellen einer Instanz von Bird
for animal in [dog, cat, bird]: # Iterieren über die Instanzen
print(animal.eat()) # Aufruf der geerbten oder überschriebenen Methode eat
print(animal.make_sound()) # Aufruf der überschriebenen Methode make_sound
print('-----')
Die Ausgabe wäre:
Rex is eating.
Rex barks.
-----
Whiskers is eating.
Whiskers meows.
-----
Tweety is pecking at its food.
Tweety chirps.
-----
In dem obigen Code ist Animal die Elternklasse, während Dog, Cat und Bird Unterklassen sind. Die Unterklassen erben alle Methoden der Klasse Animal. Allerdings überschreibt jede Unterklasse die Methode make_sound, da das Geräusch, das jedes Tier macht, einzigartig ist. Wir überschreiben auch die Methode eat in der Klasse Bird, weil die Art und Weise, wie Vögel essen, sich von dem allgemeinen Essverhalten unterscheidet, das in der Klasse Animal definiert ist.
Dieser Ansatz ermöglicht es uns, reale Objekte und ihre Beziehungen effektiver darzustellen und so einen klaren, prägnanten und wartbaren Code zu erstellen. Vererbung erlaubt es uns also, die Vorteile der Codewiederverwendung und der Verringerung der Komplexität zu nutzen.
Herausforderung: Klassen Person & Employee
Sie sollen zwei Klassen erstellen: Person und Employee.
Die Klasse Person sollte die folgenden Attribute enthalten:
name: Ein String, der den Namen der Person repräsentiert.
age: Eine ganze Zahl, die das Alter der Person repräsentiert.
Die Klasse Person sollte auch die folgende Methode enthalten:
introduce_yourself(): Diese Methode druckt einen String im folgenden Format: "My name is {name} and I am {age} years old."
Die Klasse Employee sollte von der Klasse Person erben und das folgende Attribut hinzufügen:
job_title: Ein String, der die Berufsbezeichnung der Person repräsentiert.
Die Klasse Employee sollte auch die folgende Methode überschreiben:
introduce_yourself(): Diese Methode druckt einen String im folgenden Format: "My name is {name}, I am {age} years old, and my job title is {job_title}."