So verwenden Sie DataClasses in Python

So verwenden Sie DataClasses in Python
In diesem Artikel wird eine Anleitung zur Verwendung der neuen "Dataclass" -Objekte in Python 3 behandelt.7 und neuere Versionen. DataClasses sind genau wie andere Python -Klassen, sind jedoch insbesondere so konzipiert. Wenn Sie über „Namentuple“ -Objekte Bescheid wissen und sie in Python verwendet haben, können Sie sie als mutable benannte Tuple -Objekte definieren. Sie können neue Instanzen von DataClasses erstellen wie jede andere Klasse oder benannte Objekte vom Typ genannter Typ und Zugriff auf ihre Attribute mit der Punktnotation zugreifen.

Grundlegende Syntax und Verwendung

Um eine DataClass und ihre Syntax zu verstehen, müssen Sie zuerst das grundlegende Layout und die Grundstruktur einer Python -Klasse verstehen. Unten finden Sie ein Beispiel, das eine einfache Python -Klasse zeigt:

Klasse StockInhand:
Def __init __ (Selbst, Äpfel, Orangen, Mangos):
selbst.Äpfel = Äpfel
selbst.Orangen = Orangen
selbst.Mangos = Mangos
Aktien = StockInhand (40, 50, 60)
Druck (Lagerbestand.Äpfel, Lager.Orangen, Lager.Mangos)

In der obigen Code -Probe wurde eine neue Klasse namens „StockInhand“ mit einer darin definierten „__init__“ -Methode erstellt. Die __init__ -Methode wird automatisch aufgerufen, wenn Sie eine neue Instanz der StockInhand -Klasse erstellen. In diesem Fall wurde die __init__ -Methode mit einigen obligatorischen Argumenten definiert. Sie können also keine neue Instanz von StockInhand erstellen, ohne einige Werte für notwendige Argumente. Das Argument „Selbst“ enthält einen Hinweis auf die Instanz einer Klasse, sodass Sie es verwenden können, um auf jede Variable oder Methode innerhalb einer Klasse zu verweisen, solange diese Variablen und Methoden durch die Verwendung des Selbstarguments definiert wurden. Das Selbstargument fungiert als Convenience -Tool und kann alles benannt werden. Sie können es auch vollständig weglassen. In den letzten Aussagen wird eine neue Instanz der StockInhand -Klasse erstellt und auf die Variablen werden mithilfe von Punktnotation zugegriffen.

Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

40 50 60

Die gleiche Klasse kann mit DataClass wie folgt definiert werden:

aus DataClasses importieren Sie DataClass
@dataclass
Klasse StockInhand:
Äpfel: int
Orangen: int
Mangos: int
Aktien = StockInhand (40, 50, 60)
Druck (Lagerbestand.Äpfel, Lager.Orangen, Lager.Mangos)

Die erste Anweisung importiert den Dekorator „DataClass“ aus dem Modul „DataClasses“. Dekorateure können verwendet werden, um das Verhalten von Python -Objekten zu ändern, ohne sie tatsächlich zu ändern. In diesem Fall ist der DataClass -Dekorator vordefiniert und stammt aus dem DataClasses -Modul. Um eine DataClass zu definieren, müssen Sie Dataclass -Dekorateur mit „@“ -Symbol an eine Python -Klasse anhängen, wie in der obigen Code -Probe gezeigt. In den nächsten Aussagen werden Variablen in der DataClass unter Verwendung von Typ -Tipps definiert, um anzuzeigen, welcher Objekttyp sie sind. Typ -Hinweise wurden in Python 3 eingeführt.6 und sie werden mit „:“ (Colon) Symbolen definiert. Sie können eine neue Instanz von Dataclass erstellen wie jede andere Python -Klasse. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

40 50 60

Beachte. Hier ist ein Beispiel:

aus DataClasses importieren Sie DataClass
@dataclass
Klasse StockInhand:
Äpfel: int
Orangen: int
Mangos: int
Def Total_Stock (Selbst) -> int:
Rückkehr selbst.Äpfel + Selbst.Orangen + Selbst.Mangos
Aktien = StockInhand (40, 50, 60)
Druck (Lagerbestand.Total_stock ())

Es wurde eine neue Methode namens "Total_Stock" erstellt, und ein Typ Hinweis mit dem int "reservierten Schlüsselwort" wurde ihm zugewiesen, um den Typ des Rückgabewerts anzuzeigen. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

150

Variablen in Dataclass -Objekten können Standardwerte haben

Sie können Standardwerte für Daten von DataClasses nach Typ -Hinweisen zuweisen. Hier ist ein Beispiel:

aus DataClasses importieren Sie DataClass
@dataclass
Klasse StockInhand:
Äpfel: int = 40
Orangen: int = 50
Mangos: int = 60
Def Total_Stock (Selbst) -> int:
Rückkehr selbst.Äpfel + Selbst.Orangen + Selbst.Mangos
stock = stockInhand ()
Druck (Lagerbestand.Total_stock ())

In der zweiten letzten Erklärung wurden bei der Erstellung einer neuen Instanz von StockInhand DataClass keine Argumente vorgelegt, sodass Standardwerte verwendet wurden. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

150

Dataclass -Mitglieder sind veränderlich

DataClasses sind veränderlich, sodass Sie den Wert seiner Mitglieder ändern können, indem Sie einen Verweis auf sie erhalten. Unten finden Sie ein Code -Beispiel:

aus DataClasses importieren Sie DataClass
@dataclass
Klasse StockInhand:
Äpfel: int = 40
Orangen: int = 50
Mangos: int = 60
Def Total_Stock (Selbst) -> int:
Rückkehr selbst.Äpfel + Selbst.Orangen + Selbst.Mangos
stock = stockInhand ()
Aktie.Äpfel = 100
Druck (Lagerbestand.Total_stock ())

Der Wert der Äpfelvariablen wurde geändert, bevor die Methode Total_Stock aufgerufen wird. Nachdem Sie das obige Code -Beispiel ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

210

Erstellen einer DataClass aus einer Liste

Sie können eine DataClass mit der Methode "make_dataclass" programmgesteuert erstellen, wie im folgenden Code -Beispiel gezeigt:

DataClasses importieren
Fields = [("Äpfel", int, 40), ("Orangen", int, 50), ("Mangos", int, 60)]
StockInhand = DataClasses.make_dataclass (
"Stockinhand", Felder,
Namespace = 'Total_Stock': lambda self: self.Äpfel + Selbst.Orangen + Selbst.Mangos
)
stock = stockInhand ()
Aktie.Äpfel = 100
Druck (Lagerbestand.Total_stock ())

Die make_dataclass -Methode nimmt einen Klassennamen und eine Liste von Mitgliedsfeldern als zwei obligatorische Argumente an. Sie können die Mitglieder als eine Liste von Tupeln definieren, bei denen jedes Tupel den Namen der Variablen, seinen Typ und seinen Standardwert enthält. Das Definieren des Standardwerts ist nicht erforderlich. Sie können ihn weglassen, um keinen Standardwert zuzuweisen. Das optionale Namespace-Argument nimmt ein Wörterbuch an, mit dem Elementfunktionen mithilfe von Schlüsselwertpaaren und Lambda-Funktionen definiert werden können. Der obige Code ist genau gleichwertig mit der manuellen Defestierung der folgenden DataClass:

aus DataClasses importieren Sie DataClass
@dataclass
Klasse StockInhand:
Äpfel: int = 40
Orangen: int = 50
Mangos: int = 60
Def Total_Stock (Selbst):
Rückkehr selbst.Äpfel + Selbst.Orangen + Selbst.Mangos
stock = stockInhand ()
Aktie.Äpfel = 100
Druck (Lagerbestand.Total_stock ())

Nachdem Sie die beiden oben genannten Code -Beispiele ausgeführt haben, sollten Sie die folgende Ausgabe erhalten:

210

Warum eine Daten anstelle einer Klasse verwenden??

Sie fragen sich vielleicht, warum Sie DataClasses verwenden, wenn sie fast die gleichen wie andere Python -Klassen sind? Einer der Hauptvorteile bei der Verwendung von DataClasses ist die Übersichtlichkeit. Sie können DataClasses mit sauberen und minimalen Abkürzungen ohne viel Boilerplate -Code erstellen. Sie sind speziell für die Verwendung als Datencontainer ausgelegt, bei denen Variablen mithilfe von Punktnotation einfach zugegriffen werden können. Sie können jedoch auch DataClasses als vollwertige Klassen verwenden. In einfachen Worten, wenn Sie eine Python -Klasse verwenden möchten, um sie als Datenspeicher zu verwenden, scheint DataClass eine bessere Wahl zu sein.

Abschluss

DataClasses in Python bieten eine minimale Möglichkeit, um schnell Python -Klassen zu erstellen, die als Datenspeicher verwendet werden sollen. Sie können Verweise auf Mitglieder von DataClasses mit Punktnotation erhalten, und sie sind besonders nützlich, wenn Sie nach Wörterbüchern wie Schlüsselwertpaaren suchen, auf die mit DOT-Notation zugegriffen werden kann.