Abstrakte Python-Eigenschaft
![Abstrakte Python-Eigenschaft](/img/Python/feature-image---python-abstract-property.webp)
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.