Python-Datenklasse:Eine bessere Möglichkeit, Daten zu speichern
Eine Python-Datenklasse ist eine reguläre Python-Klasse mit dem @dataclass
Dekorateur. Es wurde speziell zum Speichern von Daten erstellt. Seit der Python-Version 3.7 bietet Python Datenklassen über ein eingebautes Modul namens dataclass
an . Es gibt mehrere Vorteile gegenüber regulären Python-Klassen, die wir in diesem Artikel untersuchen werden. Wir sehen uns auch Beispielcode und einige gängige Operationen an, die Sie möglicherweise mit Datenklassen ausführen möchten.
Inhaltsverzeichnis
Der Vorteil der Verwendung von Datenklassen
Warum sollten Sie eine Datenklasse anstelle einer regulären Python-Klasse verwenden? Schauen wir uns zunächst einige der Vorteile an, die eine Python-Datenklasse zu bieten hat.
Erfordert eine minimale Menge an Code
Die @dataclass
decorator fügt einer Klasse viele Funktionen hinzu, ohne sichtbaren Code hinzuzufügen. Dadurch kann Ihre Datenklasse sehr kompakt sein und dennoch viele nützliche Funktionen bieten. Sie müssen lediglich die Felder für Ihre Daten definieren. Sie müssen keine Funktionen definieren.
Vergleich
Zwei Python-Datenklassen können mit ==
verglichen werden weil die sogenannte Dunder-Methode __eq__ automatisch implementiert wird. Im Allgemeinen können wir jedes Python-Objekt, das diese spezielle Methode implementiert, mit anderen Objekten desselben Typs vergleichen.
Drucken einer Datenklasse
Ebenso, weil __repr__
implementiert ist, können Sie Datenklassen drucken und erhalten eine schöne Darstellung davon. Dies ist besonders nützlich zum Debuggen.
Datenklassen erfordern Typhinweise
Datenklassen sind um das neue (ish) Typsystem herum aufgebaut, das Python anbietet. Die Verwendung von Typhinweisen verringert die Wahrscheinlichkeit von Fehlern und unerwartetem Verhalten in Ihrem Code. Sie deklarieren im Wesentlichen den Datentyp, der in einer Variablen gespeichert werden soll.
Beispiel für eine Python-Datenklasse
Hier ist ein Beispiel für eine funktionierende Datenklasse:
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 Datenklasse kann Standardwerte haben. Das Zuweisen von Standardwerten ist so einfach wie das Zuweisen eines Werts zu einer Variablen. Damit unsere Card-Klasse beispielsweise den Standardwert Herzdame hat, können wir wie folgt vorgehen:
from dataclasses import dataclass @dataclass class Card: rank: str = 'Q' suit: str = 'hearts'
Konvertieren einer Datenklasse in JSON
Ein häufiger Anwendungsfall ist die Konvertierung Ihrer schön strukturierten Datenklasse in JSON. Z. B. wenn Sie die Daten in eine Datenbank exportieren oder an den Browser senden möchten. Die schlechte Nachricht hier:Es gibt keine integrierte Möglichkeit, eine Datenklasse in JSON zu konvertieren.
Die gute Nachricht ist, dass es ein Python-Paket namens dataclasses-json gibt, das die Aufgabe vereinfacht. Es erfordert jedoch einen zusätzlichen Dekorateur. Sie müssen das Paket mit dem Befehl pip install oder etwas wie Pipenv installieren, vorzugsweise in einer virtuellen Umgebung. Zum Beispiel:
$ pip install dataclasses-json
Hier ist ein Beispiel dafür, wie Sie das Paket verwenden können:
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"}
Eine andere Methode besteht darin, Python-Vererbung zu verwenden und von der JSONEncoder-Klasse zu erben, um Ihren eigenen benutzerdefinierten Encoder zu erstellen. Der Vorteil hierbei ist, dass Sie kein externes Paket installieren müssen. Wie das geht, erfahren Sie in diesem Blogbeitrag.
Lerne weiter
- Das Python-attrs-Paket enthält eine erweiterte Version der nativen Python-Datenklasse
- Die offizielle Dokumentation auf Python.org
- Wie man mehrere Werte in Python zurückgibt
Python
- Python-Datentypen
- Python-Typkonvertierung und Typumwandlung
- Python-Operatoren
- Benutzerdefinierte Python-Ausnahmen
- Python objektorientierte Programmierung
- Python-Vererbung
- Wie die Konsolidierung von Rechenzentren die Art und Weise verändert, wie wir Daten speichern
- type() und isinstance() in Python mit Beispielen
- Java - Datenstrukturen
- Datenabstraktion in C++