Python-OOP-Polymorphismus: Duck-Typisierung und Schnittstellen
Meistern Sie den Polymorphismus in Python. Erfahren Sie, wie Sie mithilfe von Duck-Typing, Methodenüberschreibung und abstrakten Basisklassen flexiblen, lose gekoppelten Code schreiben.
Übersicht
Polymorphismus ist ein griechischer Begriff und bedeutet „viele Formen“. In der objektorientierten Programmierung bezieht es sich auf die Fähigkeit verschiedener Klassen, auf denselben Methodenaufruf auf ihre eigene, einzigartige Weise zu reagieren. Mit Polymorphismus können Sie eine einzelne Funktion schreiben, die viele verschiedene Objekttypen verarbeiten kann, sofern sie eine gemeinsame Schnittstelle haben. Dies ermöglicht eine geringe Kopplung und macht Ihre Softwaresysteme hochgradig anpassungsfähig und einfach erweiterbar.
In Python ist Polymorphismus eng mit einem Konzept verbunden, das als Duck Typing bekannt ist. Der Begriff leitet sich von dem Satz ab: „Wenn es geht wie eine Ente und es quakt wie eine Ente, dann muss es eine Ente sein.“ In dynamisch typisiertem Python ist es einer Funktion egal, zu welcher Klasse ein Objekt gehört; Es ist nur wichtig, ob dieses Objekt die angeforderten Methoden implementiert. Wenn Sie beispielsweise eine Funktion haben, die „.speak()“ aufruft, können Sie ihr einen Hund, eine Katze oder einen Roboter übergeben – solange sie alle über eine „.speak()“-Methode verfügen, läuft der Code perfekt.
Für strengere Architekturen stellt Python über das integrierte Modul „abc“ abstrakte Basisklassen (ABCs) bereit. Indem Sie von „abc.ABC“ erben und den „@abstractmethod“-Dekorator verwenden, können Sie formale Schnittstellen definieren, die untergeordnete Klassen zwangsweise implementieren müssen. Wenn eine untergeordnete Klasse die abstrakten Methoden nicht definieren kann, löst Python beim Versuch, sie zu instanziieren, einen TypeError aus. Das Ausbalancieren von flexiblem Duck-Typing mit formalen abstrakten Klassen ist eine Schlüsselkompetenz für den Entwurf belastbarer Python-Bibliotheken.
Code- und Ausführungsausgabe
Implementierung polymorpher Klassen, die Formen darstellen, die ihre Fläche berechnen.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Must be implemented by subclasses."""
pass
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * (self.radius ** 2)
# Polymorphic function accepting any Shape
def print_area(shape: Shape):
print(f"Calculated Area: {shape.area():.2f}")
print_area(Square(4))
print_area(Circle(3))Calculated Area: 16.00
Calculated Area: 28.27Schrittweise Umsetzung
- Schreiben von Zahlungsprozessoren, die CreditCard-, PayPal- und Stripe-Objekte verarbeiten
- Zeichnen verschiedener Elemente (Text, Bild) mithilfe einer einheitlichen Renderschleife
- Verspotten externer API-Verbindungen während Unit-Tests
Häufig gestellte Fragen
Was ist Duck Typing?
Es ist Pythons dynamischer Ansatz zum Polymorphismus. Es prüft zur Laufzeit, ob Methoden und Eigenschaften vorhanden sind, anstatt die Vererbung von einer bestimmten übergeordneten Klasse zu überprüfen.
Können Sie eine abstrakte Basisklasse instanziieren?
Nein. Der Versuch, eine Klasse zu instanziieren, die von ABC erbt und abstrakte Methoden enthält, löst einen TypeError aus.
Verwandte Themen
Eine vollständige Einführung in Python-Klassen, -Objekte, -Vererbung und -OOP-Konzepte. Erstellen Sie robuste Datenmodelle und skalieren Sie Ihre Python-Anwendungen.
Python OOP-VererbungLernen Sie Vererbung in Python OOP. Beherrschen Sie die Unterklassenbildung, das Überschreiben von Methoden, die Verwendung von super() und mehrere Vererbungsmuster.
Empfohlene Python-Ressourcen
Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.
So sortieren Sie eine Liste in Python
Erfahren Sie, wie Sie eine Liste in Python mit der Methode sort() und der Funktion sorted() sortieren. Entdecken Sie Beispiele für benutzerdefinierte Schlüsselsortierung und umgekehrte Reihenfolge.
Spickzettel für Python-String-Methoden
Ein vollständiges Referenzhandbuch für die Python-String-Manipulation. Meistern Sie das Formatieren, Suchen, Teilen, Ersetzen und Überprüfen von Zeichenfolgeneigenschaften.
Python vs. JavaScript: Welche Programmiersprache ist die beste?
Ein umfassender Vergleich zwischen Python und JavaScript. Entdecken Sie Syntaxunterschiede, Leistung, Anwendungsfälle (Backend vs. Frontend) und Codierungsbeispiele.