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-Truestandardmäßig. BeiTruewird die Methode__init__()der Datenklasse definiert.repr-Truestandardmäßig. BeiTruewird die Methode__repr__()der Datenklasse definiert.eq-Truestandardmäßig. BeiTruewird die Methode__eq__()der Datenklasse definiert.order-Falsestandardmäßig. BeiTruewerden die Methoden__lt__(),__le__(),__gt__()und__ge__()der Datenklasse definiert.unsafe_hash-Falsestandardmäßig. BeiFalsewird die Methode__hash__()der Datenklasse definiert.frozen-Falsestandardmäßig. BeiTruewerden die Datenklassenattribute eingefroren. Dies bedeutet, dass sie nach der Initialisierung nicht weiter manipuliert werden können.match_args-Truestandardmäßig.kw_only-Falsestandardmäßig. BeiTruewerden alle Felder der Datenklasse als Nur-Schlüsselwort markiert.slots-Falsestandardmäß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
dataclassesfinden Sie in der offiziellen Dokumentation hier.
