Python Data Classes: Datenverwaltung mit moderner Syntax optimieren
Eine Python Data Class ist eine reguläre Python-Klasse mit dem @dataclass-Dekorator. Sie ist speziell zum Halten von Daten erschaffen. Seit Python 3.7 bietet Python Data Classes über das eingebaute Modul dataclasses. Mehrere Vorteile gegenüber regulären Klassen, die wir hier erkunden. Auch Beispielcode und häufige Operationen.
Vorteile von Data Classes
Minimaler Codeaufwand
Der @dataclass-Dekorator fügt einer Klasse viel Funktionalität hinzu, ohne sichtbaren Code hinzuzufügen. Ihre Data Class bleibt kompakt, bietet aber viele nützliche Features. Sie definieren nur die Felder für Ihre Daten. Keine Funktionen definieren nötig.
Vergleich
Zwei Python Data Classes lassen sich mit == vergleichen, da die Dunder-Methode __eq__ automatisch implementiert wird. Generell können wir jedes Python-Objekt, das diese Spezialmethode implementiert, mit anderen Objekten desselben Typs vergleichen.
Data Class drucken
Da __repr__ implementiert ist, können Sie Data Classes drucken und erhalten eine schöne Repräsentation. Besonders nützlich zum Debuggen.
Data Classes erfordern Type Hints
Data Classes basieren auf Pythons (relativ) neuem Typsystem. Type Hints reduzieren Bugs und unerwartetes Verhalten. Sie deklarieren quasi den Datentyp, der in einer Variable gespeichert werden soll.
Python Data Class Beispiel
Hier ein Data Class in Aktion:
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card1 = Card("Q", "hearts")
card2 = Card("Q", "hearts")
print(card1 == card2) # True
print(card1.rank) # 'Q'
print(card1) # Card(rank='Q', suit='hearts')
Standardwerte
Eine Data Class kann Standardwerte haben. Zuweisung ist so einfach wie Variablenzuweisung. Damit unsere Card-Klasse Standardwert „Damen Herz“ hat:
from dataclasses import dataclass
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
Data Class zu JSON konvertieren
Häufiger Use Case: Strukturierte Data Class zu JSON konvertieren. Z. B. für Datenbankexport oder Browser-Übertragung. Schlechte Nachricht: Kein eingebauter Weg.
Gute Nachricht: Paket dataclasses-json vereinfacht die Aufgabe. Benötigt extra Dekorator. Installation via pip install oder Pipenv, am besten in virtueller Umgebung:
$ pip install dataclasses-json
Beispiel zur Nutzung:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
card = Card()
print(card.to_json())
{"rank": "Q", "suit": "hearts"}
Alternative: Python Vererbung, von JSONEncoder erben, eigenen Encoder erstellen. Vorteil: Kein externes Paket nötig. Wie das geht, in diesem Blogpost.
Weiterlernen
- Python attrs Paket hat erweiterte Version der nativen Data Class
- Offizielle Dokumentation auf Python.org
- Wie man mehrere Werte in Python zurückgibt
Python
- Python-Datentypen meistern: Praxisleitfaden
- Python-Typkonvertierung & Casting meistern: Umfassender Leitfaden
- Python-Operatoren meistern: Umfassender Leitfaden
- Python benutzerdefinierte Exceptions: Ein praktischer Leitfaden
- Python Objektorientierte Programmierung meistern: Klassen, Vererbung, Kapselung & Polymorphie
- Python Vererbung meistern: Konzepte, Syntax und praktische Beispiele
- Data Center Konsolidierung: Kosten senken, Sicherheit erhöhen, Effizienz steigern
- type() und isinstance() in Python verstehen: Praktische Beispiele
- Java Datenstrukturen: Kernklassen & Collections Framework erkunden
- Datenabstraktion in C++: Interface-Implementierung-Trennung