Strukturen in Python
Python ist eine objektorientierte Programmiersprache, was bedeutet, dass es Klassen und Objekte hat. Während C keine objektorientierte Programmiersprache ist, kann man mit ihr nur funktionale Programmierung durchführen. Aber C enthält Strukturen, bei denen es sich um einen benutzerdefinierten Datentyp handelt.
Wir haben keine Strukturen in Python, aber wir können sie implementieren oder ihr Verhalten mit anderen Objekten darstellen, nämlich Datenklassen. Eine Datenklasse ist eine Klasse, die nur Felder und CRUD-Methoden (Getter und Setter) enthält, um diese Felder zu manipulieren. Das Hauptziel dieser Klassen besteht darin, Daten zu speichern oder einige Daten in Form eines Pakets darzustellen. Eine Datenklasse stellt Entitäten dar, und da Entitäten mehrere Parameter oder Eigenschaften haben, machen es Datenklassen einfacher, alles unter einem einzigen Objekt zu verpacken.
In diesem Artikel erfahren Sie, wie Sie Datenklassen in Python verwenden.
Datenklasse in Python
Python 3.7 führte Datenklassen ein. Obwohl Datenklassen mit primitiven Python-Klassen implementiert werden können, implementiert eine Datenklasse die meisten der erforderlichen Funktionen im Hintergrund, wodurch der Python-Code für eine Datenklasse kürzer und lesbarer wird. Die Implementierung mit primitiven Python-Klassen ermöglicht mehr Kontrolle, aber bei größeren Datenklassen kann die Implementierung chaotisch und massiv werden, was sie unüberschaubar macht.
Python hat einen Dekorator dataclass
, der im Modul dataclasses
definiert ist. Dieser Dekorator fügt automatisch spezielle Methoden hinzu, die innerhalb einer Datenklasse erforderlich sind, wie zum Beispiel __init__()
, __repr__()
usw.
Hier ist ein Beispiel.
from dataclasses import dataclass
@dataclass
class Item:
name: str
price: float
quantity: int
def total_cost(self) -> float:
return self.price * self.quantity
Wie oben erwähnt, fügt der Dekorator @dataclass
spezielle Methoden automatisch hinzu. Dies bedeutet, dass die folgende Methode __init__()
automatisch hinzugefügt wird.
def __init__(self, name: str, price: float, quantity: int = 0):
self.name = name
self.price = price
self.quantity = quantity
Weiterhin können aus dieser Datenklasse Objekte vom Typ Item
erzeugt werden, die wie normale Klassenobjekte behandelt werden können.
from dataclasses import dataclass
@dataclass
class Item:
name: str
price: float
quantity: int
def total_cost(self):
return self.price * self.quantity
a = Item("Chocolate", 25, 100)
b = Item("Chips", 35, 150)
c = Item("Cookie", 10, 50)
print(a)
print(b)
print(c)
print(a.total_cost())
print(b.total_cost())
print(c.total_cost())
Der Dekorator dataclass
hat einige Parameter, nämlich
init
-True
standardmäßig. BeiTrue
wird die Methode__init__()
der Datenklasse definiert.repr
-True
standardmäßig. BeiTrue
wird die Methode__repr__()
der Datenklasse definiert.eq
-True
standardmäßig. BeiTrue
wird die Methode__eq__()
der Datenklasse definiert.order
-False
standardmäßig. BeiTrue
werden die Methoden__lt__()
,__le__()
,__gt__()
und__ge__()
der Datenklasse definiert.unsafe_hash
-False
standardmäßig. BeiFalse
wird die Methode__hash__()
der Datenklasse definiert.frozen
-False
standardmäßig. BeiTrue
werden die Datenklassenattribute eingefroren. Dies bedeutet, dass sie nach der Initialisierung nicht weiter manipuliert werden können.match_args
-True
standardmäßig.kw_only
-False
standardmäßig. BeiTrue
werden alle Felder der Datenklasse als Nur-Schlüsselwort markiert.slots
-False
standardmäßig.
Diese Parameter können konfiguriert werden, wenn ein Dekorator dataclass
über einer Klassenimplementierung platziert wird. Einige Beispiele dafür sind wie folgt.
@dataclass
class A:
pass
@dataclass(init=True, repr=True, order=True)
class B:
pass
@dataclass(
eq=True,
order=False,
unsafe_hash=True,
)
class C:
pass
Weitere Informationen zum Modul
dataclasses
finden Sie in der offiziellen Dokumentation hier.