Vererbung

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}."
Eingabe
Ausgabe
alice=Person('Alice', 25); alice.introduce_yourself(); bob=Employee('Bob', 30, 'Engineer'); bob.introduce_yourself();
My name is Alice and I am 25 years old. My name is Bob, I am 30 years old, and my job title is Engineer.
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue