Direkt zum Inhalt

Abstrakte Klassen in Python: Ein umfassender Leitfaden mit Beispielen

Lerne mehr über abstrakte Klassen in Python, wozu sie gut sind und wie du mit dem Modul „abc“ einheitliche Schnittstellen sicherstellen kannst. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Aktualisierte 8. Sept. 2025  · 10 Min. Lesezeit

Ein wichtiger Teil der modernen Softwareentwicklung ist die objektorientierte Programmierung (OOP), die es Programmierern ermöglicht, Code auf eine skalierbare, modulare und wiederverwendbare Weise zu organisieren. Abstrakte Klassen sind eins der vielen OOP-Konzepte, die man braucht, um eine Vorlage zu erstellen, die andere Klassen nutzen können. In diesem Beitrag geht's um abstrakte Klassen, ihre Vorteile und wie man sie mit dem abc-Modul von Python erfolgreich erstellt.

Wenn du Python noch nicht kennst, kannst du mit unserem Lernpfad lernen, wie man mit Modulen und Paketen arbeitet, mit integrierten Datentypen arbeitet und benutzerdefinierte Funktionen schreibt

Was ist eine abstrakte Klasse?

Eine abstrakte Klasse ist wie eine Vorlage für andere Klassen. Es legt Methoden fest, die in jeder Klasse enthalten sein müssen, die davon erbt, aber es gibt nicht den eigentlichen Code für diese Methoden.

Stell dir das wie ein Rezept ohne bestimmte Zutatenvor – essagt dir, welche Schritte du machen musst, aber die Details hängen von der Unterklasse ab.

Beispiel:

Angenommen, du entwickelst ein Programm, um die Fläche verschiedener Formen zu berechnen.

  1. Du machst eine abstrakte Klasse namens Shape, die besagt, dass jede Form eine Methode area() haben muss.
  2. Aber Shape sagt nicht, wie area() funktioniert – weil die Formel vom Typ der Form abhängt.
  3. Jede spezifische Form (wie Circle oder Rectangle) kommt von Shape und hat ihre eigene Version von area().

Wenn du mehr über die wichtigsten Python-Konzepte erfahren möchtest, kannst du dich für unseren Kurs „Objektorientierte Programmierung in Python für Fortgeschrittene” anmelden. 

Warum sollte man abstrakte Klassen in Python verwenden?

Abstrakte Klassen sind nützlich, wenn du:

  • Implementierung der Methode erzwingen: Die Methoden einer abstrakten Klasse sind wie ein Vertrag, der von jeder Unterklasse verlangt, ihre eigene Implementierung zu liefern. Das verringert die Wahrscheinlichkeit von inkonsistenten oder fehlenden Implementierungen, indem 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-Duplikate stark und fördern das DRY-Prinzip (Do not Repeat Yourself), indem sie gemeinsame Funktionen bereitstellen, die von allen Unterklassen übernommen werden können.
  • Verbesser die Lesbarkeit und Wartbarkeit: Abstrakte Klassen helfen Entwicklern, die Struktur und Funktionalität der Software besser zu verstehen, indem sie ein einheitliches und transparentes Framework bieten. Diese Struktur macht es einfacher, den Code zu pflegen, indem sie Designprinzipien wie die Prinzipien der einzigen Verantwortung und der Trennung von Verantwortlichkeiten durchsetzt.
  • Fördern Sie Polymorphismus: Abstrakte Klassen machen es möglich, allgemeinen Code zu schreiben, der mit vielen Unterklassen gut funktioniert. Dank dieser Flexibilität können Entwickler Funktionen oder Methoden erstellen, die jede Unterklasse der abstrakten Klasse verarbeiten können, was die Erweiterbarkeit und Anpassungsfähigkeit des Codes an zukünftige Änderungen erhöht.

Du kannst sicherstellen, dass jede Unterklasse, wie z. B. Dog oder Cat, ihre Implementierung der Methode speak umsetzt, wenn du zum Beispiel eine abstrakte Klasse Animal mit einer abstrakten Methode speak hast. Durch diese Einheitlichkeit wird dein Code zuverlässig und vorhersehbar.

Python von Grund auf lernen

Beherrsche Python für Data Science und erwerbe gefragte Fähigkeiten.
Kostenloses Lernen beginnen

Das abc-Modul in Python

Das Modul abc in Python hat eine starke eingebaute Unterstützung für abstrakte Klassen. Das Modul, das für „Abstract Base Classes“ steht, gibt Programmierern die Tools, die sie brauchen, um abstrakte Klassen zu erstellen, wie den Dekorator abstractmethod und die ABC-Klasse. 

Durch die Definition abstrakter Methoden und die Forderung nach deren Implementierung in Unterklassen helfen dir diese Tools dabei, Einheitlichkeit und Konformität mit einer vorgegebenen Schnittstelle zu gewährleisten. Indem das Modul die Implementierung wichtiger Methoden in allen abgeleiteten Klassen vorschreibt und die teilweise Implementierung gemeinsamer Funktionen in abstrakten Basisklassen erlaubt, fördert es auch bessere Designmuster. 

Deswegen ist das ABC-Modul echt wichtig, um skalierbare, robuste und stabile Python-Anwendungen zu organisieren.

Erstellen einer abstrakten Python-Klasse

Im ABC-Modul gibt's zwei wichtige Teile:

Abstrakte Basisklasse oder ABC

Die ABC-Klasse ist eine eingebaute Python-Funktion, die als 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, wie durch diese Vererbung angezeigt wird. Indem sie als Blaupausen dienen, stellen abstrakte Klassen sicher, dass jede konkrete Unterklasse bestimmte Regeln einhält.

Du kannst abstrakte Methoden in einer abstrakten Klasse mit dem Dekorator abstractmethod definieren. Jede konkrete Unterklasse muss abstrakte Methoden, die Platzhalter sind, implementieren und überschreiben. Das macht den Code konsistent und vorhersehbar, weil es sicherstellt, dass alle abgeleiteten Klassen die Funktionen für die festgelegten Methoden bieten. Ein nützliches Tool, um die Implementierung von Methoden zu verlangen und gleichzeitig Unterklassen Flexibilität bei der Erfüllung dieser Anforderungen zu geben, ist der Dekorator abstractmethod.

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 nach mehr praktischen Python-Projekten suchst, schau dir unsere Liste der 60 besten Python-Projekte für Entwickler aller Niveaus an. 

Wie das abc-Modul die Methodenimplementierung durchsetzt

Dank des Dekorators abstractmethod wird garantiert, dass jede Unterklasse einer abstrakten Klasse die dekorierten Methoden implementiert. Als Vorsichtsmaßnahme verhindert es, dass Unterklassen erstellt werden, die nicht die erforderlichen Fähigkeiten haben. 

Python gibt eine TypeError-Fehlermeldung aus, wenn versucht wird, eine Unterklasse zu instanziieren, die nicht alle abstrakten Methoden überschreibt. Diese strenge Durchsetzung verringert die Wahrscheinlichkeit von Fehlern und verbessert die Code-Stabilität, indem sie Entwicklern hilft, Implementierungsfehler frühzeitig zu erkennen. 

Außerdem stellt es sicher, dass alle konkreten Unterklassen das vorgesehene Verhalten und Design der abstrakten Klasse einhalten.

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 musst du zum Definieren einer abstrakten Klasse den Dekorator abstractmethod verwenden und eine Unterklasse von ABC erstellen. Auf diese Weise können Programmierer die Grundlagen für andere Klassen schaffen, indem sie die Methoden definieren, die verwendet werden müssen. 

Hier ist eine ausführliche Schritt-für-Schritt-Anleitung:

  • Hol die nötigen Module rein: Zuerst solltest du die Module ABC und abstractmethod aus dem Modul ABC importieren. Um abstrakte Klassen und Methoden zu definieren, braucht man diese Tools.
  • Mach eine Klasse, die auf ABC basiert: Mach eine neue Klasse und leg ABC als ihren Erben fest. Die Klasse ist abstrakt und kann nicht direkt instanziiert werden, wie durch diese Vererbung angezeigt wird.
  • Definiere abstrakte Methoden mit @abstractmethod : Um festzulegen, welche Methoden Unterklassen überschreiben müssen, benutze den Dekorator @abstractmethod. Im Grunde sind diese Methoden Platzhalter, die dafür sorgen, dass alle abgeleiteten Klassen die nötigen Operationen ausführen.

Schritt-für-Schritt-Beispiel für die Definition einer abstrakten Klasse

Hier 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

Das stellt sicher, dass die Funktionen start_engine und stop_engine von jeder Unterklasse von „Vehicle“ umgesetzt werden.

Praktisches Beispiel: Implementierung einer abstrakten Klasse

Schau dir mal eine ausführlichere Darstellung 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

Das zeigt, wie abstrakte Klassen Flexibilität bei der Implementierung bieten und gleichzeitig eine einheitliche Schnittstelle sicherstellen.

Beispiel für eine abstrakte Basisklasse in Python

Nachdem wir uns angesehen haben, wie abstrakte Basisklassen einen Vertrag für Unterklassen definieren, schauen wir uns jetzt an, wie konkrete Klassen diese Anforderungen erfüllen, indem sie alle abstrakten Methoden implementieren.

Konkrete Klasse, die von einer abstrakten Klasse abgeleitet ist

Eine Unterklasse, die alle abstrakten Methoden einer abstrakten Klasse umsetzt, nennen wir eine konkrete Klasse. Das heißt, die konkrete Klasse hat konkrete Implementierungen für alle Methoden, die man braucht, und erfüllt damit die Vorgaben der abstrakten Klasse. 

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 lässt dich nicht einfach so eine abstrakte Klasse instanziieren. Weil es sicherstellt, dass jede von der abstrakten Klasse generierte Unterklasse den notwendigen Vertrag einhält, der durch ihre abstrakten Methoden bereitgestellt wird, ist das ein wichtiger Aspekt abstrakter Klassen. 

Zum Beispiel wird eine TypeError ausgelöst, wenn du versuchst, appliance = Appliance()

Diese Einschränkung sorgt dafür, dass abstrakte Klassen nur als Blaupausen dienen und nicht falsch benutzt werden können. Python lässt zu, dass Instanzen von WashingMachine erstellt werden, während der in Appliance festgelegte Vertrag eingehalten wird, indem alle abstrakten Methoden in WashingMachine implementiert werden. Indem sichergestellt wird, dass jede in der abstrakten Klasse angegebene Funktion vollständig in ihren konkreten Unterklassen umgesetzt wird, verbessert diese Durchsetzung die Integrität der Codebasis.

Abstrakte Eigenschaften und Initialisierung

Auf dieser Grundlage wollen wir uns genauer anschauen, wie Python abstrakte Eigenschaften mithilfe der Dekoratoren @property und @abstractmethod unterstützt, sodass Entwickler neben Methoden auch die Konsistenz von Attributen sicherstellen können.

Verwendung abstrakter Eigenschaften in Python

Abstrakte Klassen können Eigenschaften festlegen, die Unterklassen zusätzlich zu Methoden implementieren müssen. Mit dieser Funktion können Entwickler eine einheitliche Schnittstelle für Eigenschaften festlegen, die Unterklassen zusätzlich zu Methoden deklarieren müssen. 

Um sicherzustellen, dass jede Unterklasse ihre Implementierung bereitstellt, kannst du abstrakte Eigenschaften mit dem Dekorator @property zusammen mit @abstractmethod festlegen. Wenn du Klassen machst, die schreibgeschützte oder berechnete Attribute brauchen, die für die Funktion der Klasse wichtig sind, ist diese Methode echt praktisch.

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 die Funktion sound der Klasse Bird erfüllt.

Wann man abstrakte Klassen in Python benutzt

Abstrakte Klassen sind super für Sachen wie:

  • Wenn du Frameworks oder Bibliotheken entwickelst, bei denen ein bestimmtes Verhalten durchgesetzt werden muss,: In komplizierten Systemen können abstrakte Klassen einheitliche Richtlinien oder Schnittstellen festlegen, an die sich alle Unterklassen halten müssen, um Konsistenz zu gewährleisten und Fehler zu reduzieren.
  • Implementierung einheitlicher APIs über Klassen hinweg: Entwickler können sicherstellen, dass alle abgeleiteten Klassen eine einheitliche und vorhersehbare Art der Kommunikation mit der Anwendung oder Bibliothek bieten, indem sie abstrakte Methoden definieren.
  • Bereitstellung eines grundlegenden Rahmens für eine Klassenhierarchie: Eine Hierarchie verwandter Klassen kann mithilfe abstrakter Klassen als Leitfaden erstellt werden. Durch die Möglichkeit, Unterklassen anzupassen und gemeinsam genutzte Verhaltensweisen und Eigenschaften in der abstrakten Klasse zu definieren, fördert diese Struktur die Wiederverwendbarkeit und reduziert Doppelarbeit.

Bewährte Verfahren

Wenn du einen genauen Vertrag für Unterklassen brauchst, nimm abstrakte Klassen. Abstrakte Klassen sind praktisch, wenn du eine bestimmte Struktur oder ein bestimmtes Verhalten auf mehrere abgeleitete Klassen anwenden musst. Sie helfen dabei, sicherzustellen, dass jede Unterklasse einem Standarddesign entspricht, was die Vorhersagbarkeit des Codes verbessert und die Wartung vereinfacht.

Wenn jede Methode eine Standardimplementierung haben kann, solltest du keine abstrakten Klassen verwenden. In manchen Fällen kann eine konkrete Basisklasse die bessere Wahl sein, um die Komplexität zu reduzieren und trotzdem die Wiederverwendbarkeit gemeinsamer Funktionen zu sichern.

Achte darauf, dass abstrakte Klassen klar und einfach sind und nur die wichtigsten Attribute und Methoden definieren. Es kann schwierig sein, eine abstrakte Klasse zu erstellen und zu pflegen, wenn sie zu viele Kriterien hat. Konzentrier dich lieber auf die wesentlichen Sachen, die die abgeleiteten Klassen haben müssen.

Fazit

Das OOP-Toolkit von Python hat abstrakte Klassen, die echt nützlich sind, weil sie Programmierern helfen, zuverlässige und wartungsfreundliche Programme zu schreiben. Du kannst die Übersichtlichkeit, Wiederverwendbarkeit und Erweiterbarkeit deiner Anwendungen verbessern, indem du abstrakte Klassen definierst und mit Hilfe des ABC-Moduls eine einheitliche Schnittstelle für alle Unterklassen durchsetzt. Besserer und zuverlässigerer Code lässt sich durch die Implementierung abstrakter Klassen erreichen, egal wie groß das System ist, an dem du arbeitest.

Egal, ob du robuste objektorientierte Programme entwickelst, einheitliche Schnittstellen durchsetzt oder skalierbare Anwendungen erstellst – wenn du Python-Abstraktklassen beherrschst, kannst du effizienteren und besser wartbaren Code schreiben. Verbessere noch heute deine Python-Kenntnisse mit unserem umfassenden Python-Grundlagen-Lernpfad.

Häufig gestellte Fragen zu abstrakten Klassen in Python

Wie definiert man eine abstrakte Methode in Python?

Eine abstrakte Methode wird mit dem Dekorator „ @abstractmethod ” aus dem Modul „ abc ” definiert. Es ist ein 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 löst einen Fehler „ TypeError ” aus, wenn du versuchst, ein Objekt einer abstrakten Klasse zu erstellen.

Wozu dient das Modul „abc“ in Python?

Das Modul „ abc ” hat die Klasse „ ABC ” und den Dekorator „ abstractmethod ”, mit denen man abstrakte Klassen und Methoden in Python definieren und durchsetzen kann.

Kann eine abstrakte Klasse normale (konkrete) Methoden haben?

Ja, eine abstrakte Klasse kann konkrete Methoden mit Implementierung haben. Diese Methoden können von Unterklassen übernommen und genutzt werden.


Derrick Mwiti's photo
Author
Derrick Mwiti
Themen

Die besten Python-Kurse

Lernpfad

Python Daten Grundlagen

0 Min.
Erweitere deine Datenkenntnisse, entdecke, wie du Daten manipulieren und visualisieren kannst, und wende fortgeschrittene Analysen an, um datengestützte Entscheidungen zu treffen.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Lernprogramm

30 coole Python-Tricks für besseren Code mit Beispielen

Wir haben 30 coole Python-Tricks zusammengestellt, mit denen du deinen Code verbessern und deine Python-Kenntnisse ausbauen kannst.
Kurtis Pykes 's photo

Kurtis Pykes

Lernprogramm

Python-Arrays

Python-Arrays mit Code-Beispielen. Lerne noch heute, wie du mit Python NumPy Arrays erstellen und ausdrucken kannst!
DataCamp Team's photo

DataCamp Team

Lernprogramm

Wie man Listen in Python aufteilt: Einfache Beispiele und fortgeschrittene Methoden

Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Allan Ouko's photo

Allan Ouko

Lernprogramm

Python-Tutorial zum Verknüpfen von Zeichenfolgen

Lerne verschiedene Methoden zum Verknüpfen von Zeichenfolgen in Python kennen, mit Beispielen, die jede Technik zeigen.
DataCamp Team's photo

DataCamp Team

Lernprogramm

Python range()-Funktion Tutorial

Lerne anhand von Beispielen die Python-Funktion range() und ihre Möglichkeiten kennen.
Aditya Sharma's photo

Aditya Sharma

Lernprogramm

Python JSON-Daten: Ein Leitfaden mit Beispielen

Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Moez Ali's photo

Moez Ali

Mehr anzeigenMehr anzeigen