Python Dataclasses

Dataclasses sind Python-Klassen, die sich jedoch zur Speicherung von Datenobjekten eignen. Dieses Modul stellt einen Decorator und Funktionen bereit, um automatisch generierte spezielle Methoden wie __init__() und __repr__() zu benutzerdefinierten Klassen hinzuzufügen.

Features

  1. Sie speichern Daten und repräsentieren einen bestimmten Datentyp. Bsp.: Eine Zahl. Für Personen, die mit ORMs vertraut sind, ist eine Model-Instanz ein Datenobjekt. Es repräsentiert eine bestimmte Art von Entität. Es enthält Attribute, die die Entität definieren oder repräsentieren.

  2. Sie können mit anderen Objekten desselben Typs verglichen werden. Bsp.: Eine Zahl kann größer, kleiner oder gleich einer anderen Zahl sein.

Python 3.7 bietet den Decorator dataclass, der verwendet wird, um eine Klasse in eine Dataclass umzuwandeln.

class Number:
    def __init__(self, val):
        self.val = val

obj = Number(2)
obj.val
2

mit Dataclass

# Dataclass: generiert automatisch __init__ und __repr__ Methoden
from dataclasses import dataclass

@dataclass  # Decorator wandelt Klasse in Dataclass um
class Number:
    val: int  # Typannotation erforderlich

obj = Number(2)  # __init__ wird automatisch erstellt
obj.val
2

Standardwerte

Es ist einfach, Standardwerte zu den Feldern Ihrer Datenklasse hinzuzufügen.

# Dataclass mit Standardwerten: Felder mit Standardwerten müssen nach erforderlichen Feldern kommen
@dataclass
class Product:
    name: str        # Erforderliches Feld
    count: int = 0   # Optionales Feld mit Standardwert
    price: float = 0.0  # Optionales Feld mit Standardwert

obj = Product("Python")  # Nur Name erforderlich, andere verwenden Standardwerte
obj.name
Python
obj.count
0
obj.price
0.0
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

In einer Dataclass, wo müssen Felder mit Standardwerten platziert werden?
A. Vor Feldern ohne Standardwerte
B. Nach Feldern ohne Standardwerte
C. Es spielt keine Rolle
D. In einem separaten Abschnitt

Typ-Hinweise (Type hints)

Es ist zwingend erforderlich, den Datentyp in der Dataclass zu definieren. Wenn Sie jedoch den Datentyp nicht angeben möchten, verwenden Sie typing.Any.

from dataclasses import dataclass
from typing import Any

@dataclass
class WithoutExplicitTypes:
   name: Any
   value: Any = 42