Python bietet mit der `dataclass`-Dekorator aus dem `dataclasses`-Modul eine bequeme Möglichkeit, Klassen zu erstellen, die hauptsächlich dazu dienen, Daten zu speichern und zu verwalten. Die `@dataclass`-Dekoration automatisiert viele gängige Methoden, die Du sonst manuell schreiben müsstest, wie zum Beispiel `__init__`, `__repr__` und `__eq__`.
Einfaches Beispiel einer Datenklasse
Um eine Datenklasse zu erstellen, importiere zunächst das `dataclasses`-Modul und dekoriere Deine Klasse mit `@dataclass`:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
Nun erstelle zwei Instanzen der Person-Klasse:
alice = Person("Alice", 30)
bob = Person("Bob", 25)
Da die `@dataclass`-Dekoration die `__repr__`-Methode automatisch generiert, können wir die Objekte direkt ausgeben:
print(alice) # Ausgabe: Person(name='Alice', age=30)
print(bob) # Ausgabe: Person(name='Bob', age=25)
Datenklassen mit Standardwerten
Du kannst auch Standardwerte für Attribute in Datenklassen angeben. Hier ist ein Beispiel:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
city: str = "Berlin"
Wenn Du nun eine Person-Instanz ohne Angabe der `city` erstellst, wird der Standardwert “Berlin” verwendet:
charlie = Person("Charlie", 22)
print(charlie) # Ausgabe: Person(name='Charlie', age=22, city='Berlin')
Unveränderliche Datenklassen
Du kannst eine Datenklasse auch unveränderlich machen, indem Du das `frozen`-Argument auf `True` setzt:
from dataclasses import dataclass
@dataclass(frozen=True)
class ImmutablePerson:
name: str
age: int
Versuchst Du nun, ein Attribut einer unveränderlichen Datenklasse zu ändern, wird eine `FrozenInstanceError`-Exception ausgelöst:
dave = ImmutablePerson("Dave", 35)
dave.age = 36 # Auslösen einer FrozenInstanceError
Die Verwendung von `@dataclass` in Python erleichtert die Erstellung von Klassen, die in erster Linie zur Speicherung von Daten dienen. Es automatisiert gängige Methoden und bietet Funktionen wie Standardwerte und Unveränderlichkeit. Durch die Verwendung von Datenklassen kannst Du Deinen Code sauberer, kürzer und besser lesbar gestalten.