Lernpfad
Abstrakte Python-Klassen: Ein umfassender Leitfaden mit Beispielen
Eine Schlüsselkomponente der modernen Softwareentwicklung ist die objektorientierte Programmierung (OOP), die Programmierern die Möglichkeit gibt, ihren Code skalierbar, modular und wiederverwendbar zu gestalten. Abstrakte Klassen sind eines der zahlreichen OOP-Konzepte, die wichtig sind, um eine Vorlage zu erstellen, die andere Klassen verwenden können. Dieser Beitrag erklärt abstrakte Klassen, ihre Vorteile und wie du sie mit dem abc-Modul von Python erfolgreich erstellen kannst.
Neu in Python? Lerne, wie du mit Modulen und Paketen arbeitest, mit eingebauten Datentypen arbeitest und eigene Funktionen schreibst.
Was ist eine abstrakte Klasse?
Andere Klassen verwenden eine abstrakte Klasse als Modell. Obwohl sie deren Implementierung nicht bereitstellt, legt sie Methoden fest, die ihre Unterklassen verwenden müssen. So können Programmierer garantieren, dass alle Unterklassen einem bestimmten Vertrag folgen, indem sie eine einheitliche Schnittstelle für verschiedene Implementierungen erzwingen.
Zum Beispiel könnte eine abstrakte Klasse wie Shape
Methoden wie area
und perimeter
definieren. Die Implementierung dieser Funktionen würde dann für jede einzelne Form, wie z. B. einen Kreis oder ein Rechteck, bereitgestellt werden.
Willst du deine OOP-Kenntnisse auf die nächste Stufe bringen? Melde dich für unseren Kurs Objektorientierte Programmierung in Pythonan.
Warum sollte man abstrakte Klassen in Python verwenden?
Abstrakte Klassen sind nützlich, wenn du:
- Erzwinge die Umsetzung der Methode: Die Methoden einer abstrakten Klasse funktionieren wie ein Vertrag, der von jeder Unterklasse verlangt, ihre eigene Implementierung zu liefern. Dadurch wird die Möglichkeit inkonsistenter oder fehlender Implementierungen verringert, da sichergestellt wird, dass bestimmte Funktionen in allen abgeleiteten Klassen vorhanden sind.
- Fördern Sie die Wiederverwendung von Code: Abstrakte Klassen können sowohl konkrete als auch abstrakte Methoden haben. Die konkreten Methoden reduzieren Code-Duplizierung und fördern die DRY-Prinzipien (Do not Repeat Yourself), indem sie gemeinsame Funktionen bereitstellen, die von allen Unterklassen geerbt werden können.
- Verbessere die Lesbarkeit und Wartungsfreundlichkeit: Abstrakte Klassen helfen Entwicklern, die Struktur und Funktionalität der Software besser zu verstehen, indem sie einen konsistenten und transparenten Rahmen bieten. Diese Struktur erleichtert die Wartung des Codes, indem sie Entwurfsprinzipien wie Einzelverantwortung und Trennung der Zuständigkeiten durchsetzt.
- Ermutige den Polymorphismus: Abstrakte Klassen machen es möglich, allgemeinen Code zu schreiben, der mit einer Vielzahl von Unterklassen gut funktioniert. Dank dieser Flexibilität können Entwickler Funktionen oder Methoden erstellen, die jede Unterklasse der abstrakten Klasse behandeln können, was die Erweiterbarkeit des Codes und die Anpassungsfähigkeit an zukünftige Änderungen erhöht.
Du kannst sicherstellen, dass jede Unterklasse, wie z.B. Dog
oder Cat
, ihre Implementierung der Methode speak
implementiert, zum Beispiel, wenn du eine abstrakte Klasse Animal
mit einer abstrakten Methode speak
hast. Durch diese Einheitlichkeit wird dein Code zuverlässig und vorhersehbar.
Werde ein professioneller Python-Entwickler, indem du noch heute unseren Python-Entwickler-Kurs belegst.
Das abc-Modul in Python
Das Modul abc
in Python bietet eine starke integrierte Unterstützung für abstrakte Klassen. Das Modul, das für "Abstract Base Classes" (Abstrakte Basisklassen) steht, gibt Programmierern die nötigen Werkzeuge an die Hand, um abstrakte Klassen zu erstellen, darunter den abstractmethod
Dekorator und die ABC-Klasse.
Indem du abstrakte Methoden definierst und ihre Implementierung in Unterklassen vorschreibst, helfen dir diese Werkzeuge, die Einheitlichkeit und Konformität mit einer vorgegebenen Schnittstelle zu wahren. Indem es die Implementierung wesentlicher Methoden in allen abgeleiteten Klassen vorschreibt und die teilweise Implementierung gemeinsamer Funktionen in abstrakten Basisklassen zulässt, fördert das Modul auch verbesserte Entwurfsmuster.
Aus diesem Grund ist das ABC-Modul eine wichtige Komponente für die Organisation skalierbarer, robuster und stabiler Python-Anwendungen.
Erstellen einer abstrakten Python-Klasse
Im ABC-Modul werden zwei wesentliche Komponenten eingeführt:
Abstrakte Basisklasse, oder ABC
Die ABC-Klasse ist eine eingebaute Python-Funktion, die als grundlegende Basis für die Entwicklung abstrakter Klassen dient. Du musst von ABC erben, um eine abstrakte Klasse zu definieren. Die Klasse ist abstrakt und kann nicht direkt instanziiert werden, was durch diese Vererbung angezeigt wird. Indem sie als Blaupausen fungieren, sorgen abstrakte Klassen dafür, dass sich jede konkrete Unterklasse an eine Reihe von Regeln hält.
Du kannst abstrakte Methoden innerhalb einer abstrakten Klasse definieren, indem du den abstractmethod
Dekorator verwendest. Jede konkrete Unterklasse muss abstrakte Methoden, die Platzhalter sind, implementieren und außer Kraft setzen. Das macht den Code konsistent und vorhersehbar, indem es garantiert, dass alle abgeleiteten Klassen die Funktionalität für die vorgesehenen Methoden bieten. Ein nützliches Werkzeug, um die Implementierung von Methoden zu fordern und gleichzeitig den Unterklassen Flexibilität zu geben, wie sie diese Anforderungen erfüllen können, ist der abstractmethod
Dekorator.
Hier ist ein einfaches Beispiel:
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14159 * self.radius ** 2
def perimeter(self):
return 2 * 3.14159 * self.radius
# Uncommenting the following line will raise an error because we’re missing method implementations
# shape = Shape() # TypeError: Can't instantiate abstract class Shape with abstract methods #area, perimeter
circle = Circle(5)
print(f"Area: {circle.area()}")
print(f"Perimeter: {circle.perimeter()}")
Area: 78.53975
Perimeter: 31.4159
Wenn du auf der Suche nach weiteren praktischen Python-Projekten bist, schau dir unsere Liste der 60 besten Python-Projekte für Entwickler auf allen Ebenen an.
Wie das abc-Modul die Methodenimplementierung erzwingt
Jede Unterklasse einer abstrakten Klasse implementiert dank des abstractmethod
Dekorators garantiert die dekorierten Methoden. Als Vorsichtsmaßnahme wird verhindert, dass Unterklassen erstellt werden, die nicht über die notwendigen Fähigkeiten verfügen.
Python meldet TypeError
, wenn versucht wird, eine Unterklasse zu instanziieren, die nicht alle abstrakten Methoden außer Kraft gesetzt hat. Diese strenge Durchsetzung senkt die Wahrscheinlichkeit von Fehlern und verbessert die Stabilität des Codes, indem sie den Entwicklern hilft, Implementierungsfehler frühzeitig zu erkennen.
Sie garantiert auch, dass alle konkreten Unterklassen dem beabsichtigten Verhalten und Design der abstrakten Klasse folgen.
Zum Beispiel:
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
# Missing area and perimeter implementation
# This will raise an error
rectangle = Rectangle(5, 10)
TypeError: Can't instantiate abstract class Rectangle with abstract methods area, perimeter
Abstrakte Klassenmethoden in Python
In Python bedeutet die Definition einer abstrakten Klasse die Verwendung des abstractmethod
Dekorators und die Unterklassenbildung von ABC
. Auf diese Weise können Programmierer den Grundstein für andere Klassen legen, indem sie die Methoden definieren, die verwendet werden müssen.
Hier findest du eine gründliche Schritt-für-Schritt-Anleitung:
- Bringe die notwendigen Module mit: Du solltest zuerst
ABC
undabstractmethod
aus dem ModulABC
importieren. Um abstrakte Klassen und Methoden zu definieren, sind diese Werkzeuge notwendig. - Konstruiere eine Klasse, die auf
ABC
basiert: Erstelle eine neue Klasse und legeABC
als ihren Erben fest. Die Klasse ist abstrakt und kann nicht direkt instanziiert werden, was durch diese Vererbung angezeigt wird. - Definiere abstrakte Methoden mit
@abstractmethod
: Um festzulegen, welche Methoden von Unterklassen überschrieben werden müssen, verwendest du den@abstractmethod
Dekorator. Im Wesentlichen dienen diese Methoden als Platzhalter, die sicherstellen, dass alle abgeleiteten Klassen die notwendigen Operationen ausführen.
Schritt-für-Schritt-Beispiel für die Definition einer abstrakten Klasse
Hier ist ein praktisches Beispiel zur Veranschaulichung:
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def start_engine(self):
pass
@abstractmethod
def stop_engine(self):
pass
class Car(Vehicle):
def start_engine(self):
print("Car engine started")
def stop_engine(self):
print("Car engine stopped")
# Instantiating the abstract class directly will raise an error
# vehicle = Vehicle()
car = Car()
car.start_engine()
car.stop_engine()
Car engine started
Car engine stopped
Dies garantiert, dass die Funktionen start_engine
und stop_engine
von jeder Unterklasse von Vehicle implementiert werden.
Praxisbeispiel: Implementierung einer abstrakten Klasse
Sieh dir eine ausführlichere Illustration mit einer Vehicle
Klasse an:
from abc import ABC, abstractmethod
class Vehicle(ABC):
def __init__(self, brand):
self.brand = brand
@abstractmethod
def start_engine(self):
pass
@abstractmethod
def stop_engine(self):
pass
class Motorcycle(Vehicle):
def start_engine(self):
print(f"{self.brand} motorcycle engine started")
def stop_engine(self):
print(f"{self.brand} motorcycle engine stopped")
motorcycle = Motorcycle("Yamaha")
motorcycle.start_engine()
motorcycle.stop_engine()
Yamaha motorcycle engine started
Yamaha motorcycle engine stopped
Dies verdeutlicht, wie abstrakte Klassen Flexibilität bei der Implementierung ermöglichen und gleichzeitig eine einheitliche Schnittstelle durchsetzen.
Beispiel für eine abstrakte Python-Basisklasse
Nachdem wir nun gesehen haben, wie abstrakte Basisklassen einen Vertrag für Unterklassen definieren, wollen wir untersuchen, wie konkrete Klassen diese Anforderungen erfüllen, indem sie alle abstrakten Methoden implementieren.
Konkrete Klasse, die von einer abstrakten Klasse erbt
Eine Unterklasse, die alle abstrakten Methoden einer abstrakten Klasse implementiert, wird als konkrete Klasse bezeichnet. Das bedeutet, dass die konkrete Klasse spezifische Implementierungen für alle notwendigen Methoden bereitstellt und damit den von der abstrakten Klasse festgelegten Vertrag erfüllt.
Zum Beispiel:
from abc import ABC, abstractmethod
class Appliance(ABC):
@abstractmethod
def turn_on(self):
pass
@abstractmethod
def turn_off(self):
pass
class WashingMachine(Appliance):
def turn_on(self):
print("Washing machine is now ON")
def turn_off(self):
print("Washing machine is now OFF")
machine = WashingMachine()
machine.turn_on()
machine.turn_off()
Washing machine is now ON
Washing machine is now OFF
Instanzen erstellen und Regeln durchsetzen
Python verhindert, dass du eine abstrakte Klasse sofort instanziieren kannst. Dies ist ein wesentlicher Aspekt abstrakter Klassen, denn es stellt sicher, dass jede Unterklasse, die aus der abstrakten Klasse erzeugt wird, sich an den notwendigen Vertrag hält, der durch die abstrakten Methoden vorgegeben ist.
Zum Beispiel wird eine TypeError
ausgelöst, wenn du versuchst, eine appliance = Appliance()
Diese Einschränkung garantiert, dass abstrakte Klassen nur als Blaupausen funktionieren und nicht missbraucht werden können. Python ermöglicht es, Instanzen von WashingMachine
zu erstellen und dabei den in Appliance
festgelegten Vertrag einzuhalten, indem alle abstrakten Methoden in WashingMachine
implementiert werden. Dadurch, dass garantiert wird, dass jedes in der abstrakten Klasse angegebene Merkmal vollständig in den konkreten Unterklassen implementiert ist, wird die Integrität der Codebasis verbessert.
Abstrakte Eigenschaften und Initialisierung
Auf dieser Grundlage wollen wir uns genauer ansehen, wie Python abstrakte Eigenschaften mit den @property’ and
@abstractmethod'-Dekoratoren unterstützt und es Entwicklern ermöglicht, die Konsistenz von Attributen und Methoden zu erzwingen.
Abstrakte Eigenschaften in Python verwenden
Abstrakte Klassen können neben den Methoden auch Eigenschaften angeben, die Unterklassen implementieren müssen. Diese Funktion ermöglicht es Entwicklern, eine einheitliche Schnittstelle für Eigenschaften festzulegen, die Unterklassen zusätzlich zu den Methoden deklarieren müssen.
Um zu gewährleisten, dass jede Unterklasse ihre Implementierung bereitstellt, können abstrakte Eigenschaften mit dem @property
Dekorator in Kombination mit @abstractmethod
angegeben werden. Bei der Erstellung von Klassen, die schreibgeschützte oder berechnete Attribute benötigen, die für den Betrieb der Klasse wichtig sind, ist diese Methode besonders hilfreich.
Beispiel: abstrakte Klasse mit Eigenschaften
Hier ist ein Beispiel:
from abc import ABC, abstractmethod
class Animal(ABC):
@property
@abstractmethod
def sound(self):
pass
class Bird(Animal):
@property
def sound(self):
return "Chirp"
bird = Bird()
print(bird.sound)
Chirp
Die Bedingung der abstrakten Klasse Animal
wird durch das Merkmal sound
der Klasse Bird
erfüllt.
Wann man abstrakte Python-Klassen verwenden sollte
Abstrakte Klassen sind ideal für Szenarien wie:
- Bei der Entwicklung von Frameworks oder Bibliotheken, bei denen ein bestimmtes Verhalten erzwungen werden muss: In komplizierten Systemen können abstrakte Klassen eine einheitliche Reihe von Richtlinien oder Schnittstellen festlegen, an die sich alle Unterklassen halten müssen, um Konsistenz zu gewährleisten und Fehler zu vermeiden.
- Implementierung einheitlicher APIs für alle Klassen: Entwickler können durch die Definition abstrakter Methoden sicherstellen, dass alle abgeleiteten Klassen ein standardisiertes und vorhersehbares Mittel zur Kommunikation mit der Anwendung oder Bibliothek bieten.
- Bereitstellung eines Grundgerüsts für eine Klassenhierarchie: Eine Hierarchie verwandter Klassen kann mit Hilfe von abstrakten Klassen als Leitfaden erstellt werden. Indem sie Anpassungen in Unterklassen zulässt und Entwicklern erlaubt, gemeinsame Verhaltensweisen und Merkmale in der abstrakten Klasse zu deklarieren, fördert diese Struktur die Wiederverwendbarkeit und minimiert Doppelarbeit.
Bewährte Praktiken
Wenn ein genauer Vertrag für Unterklassen festgelegt werden muss, solltest du abstrakte Klassen verwenden. Abstrakte Klassen sind nützlich, wenn du eine bestimmte Struktur oder ein bestimmtes Verhalten auf mehrere abgeleitete Klassen anwenden willst. Sie helfen sicherzustellen, dass jede Unterklasse einem Standarddesign folgt, was die Vorhersehbarkeit des Codes verbessert und die Wartung erleichtert.
Wenn jede Methode eine Standardimplementierung haben kann, solltest du keine abstrakten Klassen verwenden. In bestimmten Situationen kann eine konkrete Basisklasse die bessere Option sein, um die Komplexität zu verringern und gleichzeitig die Möglichkeit der Wiederverwendung gemeinsamer Funktionen zu erhalten.
Achte darauf, dass abstrakte Klassen klar und einfach sind und nur die wichtigsten Attribute und Methoden definieren. Es kann eine Herausforderung sein, eine abstrakte Klasse zu erstellen und zu pflegen, wenn sie zu viele Kriterien hat. Konzentriere dich stattdessen auf die wesentlichen Aspekte, die die abgeleiteten Klassen haben müssen.
Fazit
Das OOP-Toolkit von Python enthält abstrakte Klassen, die ein mächtiges Werkzeug sind, mit dem Programmierer zuverlässige und wartbare Programme erstellen können. Du kannst die Übersichtlichkeit, Wiederverwendbarkeit und Erweiterbarkeit deiner Anwendungen fördern, indem du abstrakte Klassen definierst und mit Hilfe des ABC-Moduls eine einheitliche Schnittstelle für alle Unterklassen durchsetzt. Das Schreiben von besserem, zuverlässigerem Code kann durch die Implementierung abstrakter Klassen erreicht werden, unabhängig von der Größe des Systems, an dem du arbeitest.
Ganz gleich, ob du robuste objektorientierte Programme entwirfst, konsistente Schnittstellen durchsetzt oder skalierbare Anwendungen erstellst, die Beherrschung der abstrakten Klassen von Python verbessert deine Fähigkeit, effizienten und wartbaren Code zu schreiben. Verbessere deine Python-Kenntnisse noch heute mit unserem umfassenden Lernpfad Python-Grundlagen.
Python Abstrakte Klasse FAQs
Wie definiert man eine abstrakte Methode in Python?
Eine abstrakte Methode wird mit dem @abstractmethod
Dekorator aus dem abc
Modul definiert. Sie dient als Platzhalter und muss von jeder Unterklasse überschrieben werden.
Kannst du eine abstrakte Klasse in Python instanziieren?
Nein, du kannst eine abstrakte Klasse nicht direkt instanziieren. Python gibt eine TypeError
aus, wenn du versuchst, ein Objekt einer abstrakten Klasse zu erstellen.
Was ist der Zweck des Moduls `abc` in Python?
Das Modul abc
bietet die Klasse ABC
und den Dekorator abstractmethod
, um abstrakte Klassen und Methoden in Python zu definieren und durchzusetzen.
Kann eine abstrakte Klasse reguläre (konkrete) Methoden haben?
Ja, eine abstrakte Klasse kann konkrete Methoden mit Implementierung haben. Diese Methoden können vererbt und von Unterklassen verwendet werden.

Top Python Kurse
Kurs
Intermediate Object-Oriented Programming in Python
Lernpfad
Python Developer

Der Blog
Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn
Der Blog
Die 32 besten AWS-Interview-Fragen und Antworten für 2024
Der Blog
2022-2023 DataCamp Classrooms Jahresbericht
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024

Hesam Sheikh Hassani
15 Min.
Der Blog
Q2 2023 DataCamp Donates Digest
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Nisha Arya Ahmed
20 Min.