Methoden überschreiben
Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 19 von 64.
Das Überschreiben von Methoden ermöglicht es einer Unterklasse, eine eigene Implementierung einer Methode bereitzustellen, die bereits in der Basisklasse vorhanden ist.
Hier ist ein Beispiel für eine Elternklasse mit Methoden:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Erstellen Sie eine Unterklasse, die eine Methode überschreibt:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Überschreibt die Methode der ElternklasseDie make_sound-Methode in Dog ersetzt die von Animal, aber info wird weiterhin unverändert geerbt.
Erstellen Sie Instanzen und testen Sie die Methoden:
animal = Animal("Generic Animal")
dog = Dog("Buddy")Rufen Sie die überschriebene Methode auf:
animal.make_sound()
dog.make_sound()Rufen Sie die nicht überschriebene Methode auf:
animal.info()
dog.info()Ausgabe:
Some generic animal sound
Woof! Woof!
I am Generic Animal
I am BuddySie können jede geerbte Methode überschreiben:
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")
cat = Cat("Whiskers")
cat.make_sound()
cat.info()Ausgabe:
Meow!
I am Whiskers, a sneaky catKernpunkt: Das Überschreiben von Methoden ermöglicht es Kindklassen, vererbtes Verhalten anzupassen. Definieren Sie einfach eine Methode mit demselben Namen in der Kindklasse. Die Version der Kindklasse wird anstelle der Version der Elternklasse verwendet.
Aufgabe
MittelIn dieser Herausforderung wirst du eine Formenhierarchie implementieren.
shape.py- Enthält die übergeordneteShape-Klasse mit dem Attributcolorund Methodencircle.py- Enthält die KlasseCircle, die vonShapeerbtsquare.py- Enthält die KlasseSquare, die vonShapeerbt
Jede Datei enthält detaillierte TODO-Kommentare, die dich Schritt für Schritt durch die Implementierung führen.
Spickzettel
Methoden-Überschreiben (Method Overriding) ermöglicht es einer Kindklasse, eine eigene Implementierung einer Methode bereitzustellen, die bereits in der Elternklasse existiert.
Beispiel für eine Elternklasse:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Kindklasse, die eine Methode überschreibt:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Die Elternmethode überschreibenDie Methode make_sound in Dog ersetzt diejenige von Animal, aber info wird weiterhin unverändert geerbt.
Sie können mehrere Methoden überschreiben:
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")Wichtiger Punkt: Definieren Sie einfach eine Methode mit demselben Namen in der Kindklasse. Die Version der Kindklasse wird anstelle der Version der Elternklasse verwendet.
Probier es selbst
from shape import Shape
from circle import Circle
from square import Square
# Testfall-Handler
test_case = input()
if test_case == "base_shape":
# Testet die Basisklasse Shape
shape = Shape("green")
print(f"Color: {shape.color}")
print(f"Area: {shape.area()}")
print("Describe output:")
shape.describe()
elif test_case == "circle_basics":
# Testet die Erstellung von Circle und grundlegende Methoden
circle = Circle("red", 5)
print(f"Color: {circle.color}")
print(f"Radius: {circle.radius}")
print(f"Area (rounded): {round(circle.area(), 2)}")
print("Describe output:")
circle.describe()
elif test_case == "square_basics":
# Testet die Erstellung von Square und grundlegende Methoden
square = Square("blue", 4)
print(f"Color: {square.color}")
print(f"Side length: {square.side_length}")
print(f"Area: {square.area()}")
print("Describe output:")
square.describe()
elif test_case == "various_sizes":
# Testet mehrere Instanzen mit unterschiedlichen Dimensionen
shapes = [
Circle("yellow", 2),
Circle("orange", 7.5),
Square("purple", 3),
Square("black", 10)
]
for i, shape in enumerate(shapes, 1):
print(f"Shape {i}:")
shape.describe()
print(f"Area: {round(shape.area(), 2)}")
print() # Leerzeile für die Lesbarkeit
elif test_case == "shape_polymorphism":
# Testet polymorphes Verhalten mit einer Liste von Formen
shapes = [
Shape("white"),
Circle("red", 3),
Square("blue", 4)
]
print("Polymorphic behavior demonstration:")
for shape in shapes:
shape.describe()
print(f"Area: {round(shape.area(shape_polymorphism), 2)}")
print() # Leerzeile für die Lesbarkeit
elif test_case == "original_test_case":
# Führt den ursprünglichen Testcode aus der Aufgabe aus
circle = Circle("red", 5)
square = Square("blue", 4)
# Testet die describe-Methode
circle.describe()
square.describe()
# Testet die area-Methode
print(f"Circle area: {circle.area()}")
print(f"Square area: {square.area()}")Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen