In Python ist super() eine eingebaute Funktion, die verwendet wird, um eine Methode der Elternklasse aufzurufen. Sie ist besonders nützlich bei der Klassenvererbung, wenn Sie das Verhalten einer Methode aus der Superklasse (Elternklasse) in der Subklasse (Kindklasse) erweitern oder modifizieren möchten. super() ist auch entscheidend für die korrekte Initialisierung von Subklassen.
Um zu verstehen, wie super() mit Methoden und der Klasseninitialisierung verwendet werden kann, nehmen wir das Beispiel von Tieren, die Geräusche machen. Wir werden eine Animal-Klasse erstellen und zwei Subklassen, Dog und Cat.
class Animal: # Definiere eine Klasse namens 'Animal'
def __init__(self, species):
self.species = species
def speak(self):
return 'Sounds...'
class Dog(Animal): # Definiere eine Subklasse namens 'Dog', die von 'Animal' erbt
def __init__(self, name):
super().__init__('Dog') # Ruft die '__init__'-Methode der Elternklasse mit 'super()' auf
self.name = name # Zusätzliches Attribut 'name' für 'Dog'
print(self.species) # Gibt 'Dog' aus
def speak(self):
original = super().speak() # Ruft die 'speak'-Methode der Elternklasse mit 'super()' auf
return original + ' Woof!'
class Cat(Animal): # Definiere eine Subklasse namens 'Cat', die von 'Animal' erbt
def __init__(self, name):
super().__init__('Cat') # Ruft die '__init__'-Methode der Elternklasse mit 'super()' auf
self.name = name # Zusätzliches Attribut 'name' für 'Cat'
def speak(self):
original = super().speak() # Ruft die 'speak'-Methode der Elternklasse mit 'super()' auf
return original + ' Meow!'
dog = Dog('Rex') # Erstelle eine Instanz der Klasse 'Dog'
cat = Cat('Fluffy') # Erstelle eine Instanz der Klasse 'Cat'
print(dog.name, dog.species, dog.speak()) # Rex Dog Sounds... Woof!
print(cat.name, cat.species, cat.speak()) # Fluffy Cat Sounds... Meow!
Hier verwenden sowohl die Subklassen Dog als auch Catsuper().__init__(), um die __init__()-Methode ihrer Superklasse Animal aufzurufen. Dies stellt sicher, dass jede Instanz von Dog oder Cat korrekt mit dem entsprechenden Speziesnamen initialisiert wird. Ähnlich verwenden die speak()-Methoden in beiden Subklassen super().speak(), um die speak()-Methode von Animal aufzurufen, sodass sie den ursprünglichen Tierlaut in ihre eigenen speak()-Methoden einbeziehen können.
Die super()-Funktion ermöglicht es einer Subklasse, das Verhalten ihrer Superklasse zu nutzen und zu erweitern. Sie spielt eine entscheidende Rolle bei der Verbesserung der Wiederverwendbarkeit von Code, der Sicherstellung der korrekten Initialisierung von Subklassen und der Beibehaltung von modularem und lesbarem Code. Dies macht sie letztendlich zu einem mächtigen Werkzeug in der objektorientierten Programmierung mit Python.
Herausforderung: Fahrzeugklassen
Sie sind beauftragt, Klassen für verschiedene Arten von Fahrzeugen zu erstellen. Diese Klassen sollten einige Eigenschaften und Verhaltensweisen von realen Fahrzeugen simulieren.
Vehicle-Klasse: Die Basisklasse. Sie sollte die folgenden Attribute haben:
make: represents the manufacturer of the vehicle.
model: represents the specific model of the vehicle.
year: represents the year the vehicle was manufactured.
A method named honk() that, when called, prints the string Honk!.
Car-Klasse: Diese Klasse sollte von der Vehicle-Klasse erben. Sie sollte alle Attribute und Methoden der Vehicle-Klasse haben, plus die folgenden:
color: represents the color of the car.
It should override the honk() method of the Vehicle class.
When called, this method should print the string Beep beep!.
Bicycle-Klasse: Diese Klasse sollte ebenfalls von der Vehicle-Klasse erben. Sie sollte alle Attribute und Methoden der Vehicle-Klasse haben, muss aber die honk()-Methode überschreiben.
Beim Aufruf sollte diese Methode Ring ring! ausgeben.
Ihre Aufgabe ist es, diese Klassen und Methoden zu implementieren.