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
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.
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
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
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