Abstrakte Python-Eigenschaft

Ammar Ali 21 Juni 2023
Abstrakte Python-Eigenschaft

In diesem Tutorial wird die Verwendung des Moduls abc oder abstrakter Basisklassen zum Erstellen von Klassen mit abstrakten Eigenschaften in Python erläutert.

Abstrakte Python-Eigenschaft

Abstraktion in der objektorientierten Programmierung wird verwendet, um unnötige Informationen vor Benutzern zu verbergen. Das Innenleben einer Funktion wird dem Benutzer verborgen, aber der Benutzer kann die Funktion verwenden, um eine Aufgabe auszuführen.

Zum Beispiel verwenden wir Computersoftware, um verschiedene Aufgaben auszuführen, aber wir wissen nicht, wie die Software die Aufgabe ausführt. Wir geben der Software nur Eingaben und erhalten Ausgaben von ihr.

Wir können Abstraktion in Python verwenden, um die Komplexität eines Programms zu reduzieren, indem irrelevante Informationen ausgeblendet werden.

Eine Klasse wird abstrakt, wenn sie eine oder mehrere abstrakte Methoden enthält. Abstrakte Methoden werden in einer Unterklasse definiert, und die abstrakte Klasse wird von der Unterklasse geerbt, da abstrakte Klassen Blaupausen anderer Klassen sind.

In Python können wir das abc-Modul oder das abstrakte Basisklassen-Modul verwenden, um abstrakte Klassen zu implementieren. Die abstrakte Basisklasse bietet eine Schnittstelle für Unterklassen und ist von Vorteil, wenn der Code umfangreich ist und es schwierig ist, sich alle Klassen zu merken.

Wir müssen das Modul abc in die Basisklasse importieren und es verwenden, um die Methode der Basisklasse als Abstract zu dekorieren. Um eine abstrakte Methode zu definieren, können wir den Decorator @abstractmethod verwenden, bevor wir die Methode in der Basisklasse definieren, und wir können den Decorator @property verwenden, um eine Methode zu einer abstrakten Eigenschaft zu machen.

Lassen Sie uns beispielsweise das Modul abc importieren und eine Klasse Fahrrad erstellen, die von der Klasse ABC geerbt wird. Innerhalb der Klasse Bike erstellen wir eine abstrakte Methode, mileage().

Wir können jetzt die Basisklasse erben, um verschiedene Unterklassen mit abstrakten Methoden zu implementieren. Siehe Code unten.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    def mileage(self):
        print("The mileage is 20kmph")


class CD70(Bike):
    def mileage(self):
        print("The mileage is 15kmph ")


class CD150(Bike):
    def mileage(self):
        print("The mileage is 34kmph ")


# Main Code

h = Honda()
h.mileage()

r = CD70()
r.mileage()

s = CD150()
s.mileage()

Ausgang:

The mileage is 20kmph
The mileage is 15kmph
The mileage is 34kmph

Im obigen Code haben wir Objekte der Unterklassen erstellt und dann ihre Methode mileage() aufgerufen, die den Kilometerstand des Fahrrads ausgibt. Die Klasse Bike hat auch die Methode mileage(), aber wir können sie nicht aufrufen, weil die Methode abstrakt ist.

Wiederholen wir zum Beispiel das obige Beispiel und rufen die Methode mileage der Klasse Bike auf. Siehe Code unten.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    def mileage(self):
        print("The mileage is 20kmph")


class CD70(Bike):
    def mileage(self):
        print("The mileage is 15kmph ")


class CD150(Bike):
    def mileage(self):
        print("The mileage is 34kmph ")


# Main Code
b = Bike()
b.mileage()

Ausgang:

TypeError: Can't instantiate abstract class Bike with abstract methods mileage

Der obige Code besagt eindeutig, dass die abstrakte Klasse Bike abstrakte Methoden hat, weshalb ihr Objekt nicht erstellt und ihre Methoden nicht aufgerufen werden können.

Wir können auch Methoden anderer Klassen als abstrakte Methoden machen, indem wir den Decorator @abstractmethod vor der Definition der ersten Methode verwenden. Wenn man versucht, ein Objekt dieser Klasse für den Zugriff auf die Methoden zu erstellen, gibt Python einen Fehler aus.

Lassen Sie uns zum Beispiel die Methoden einer Unterklasse abstrahieren. Siehe Code unten.

# Class Code
from abc import ABC, abstractmethod


class Bike(ABC):
    @property
    @abstractmethod
    def mileage(self):
        pass


class Honda(Bike):
    @abstractmethod
    def mileage(self):
        print("The mileage is 20kmph")

    def mileage2(self):
        print("The mileage is 200 kmph")


# Main Code
b = Honda()
b.mileage2()

Ausgang:

TypeError: Can't instantiate abstract class Honda with abstract methods mileage

Wir haben zwei Methoden in der Klasse Honda definiert, aber keine davon ist zugänglich, weil die Klasse abstrakt ist. Unter diesem Link finden Sie weitere Details zu den abstrakten Basisklassen.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - Python Class