Python: Dataclasses
Kurz: Ein @dataclass erzeugt für eine Klasse, die vor allem Daten hält, automatisch __init__, __repr__ und Vergleiche. Das spart viel Standardcode.
Genauer: Statt Konstruktor und Textdarstellung von Hand zu schreiben, listet man nur die Felder mit Typen auf.
Im Detail
from dataclasses import dataclass, field
@dataclass
class Produkt:
name: str
preis: float
tags: list[str] = field(default_factory=list)- Automatisch:
Produkt("Tasse", 4.5)funktioniert,print(p)zeigtProdukt(name='Tasse', preis=4.5, tags=[]),==vergleicht Feld für Feld. - Standardwerte: Veränderliche Standardwerte (Listen, Dicts) nie direkt setzen, sondern
field(default_factory=list). - Optionen:
frozen=Truemacht Objekte unveränderlich und hashbar,order=Trueerzeugt Sortiervergleiche,slots=Truespart Speicher. __post_init__: Läuft nach dem Konstruktor, etwa für Prüfungen oder abgeleitete Felder.- Hilfen:
asdict(p)undreplace(p, preis=5)(Kopie mit Änderung). - Vergleich:
NamedTupleist unveränderlich und tupelartig,dictohne feste Struktur, Pydantic prüft zusätzlich zur Laufzeit.
Siehe auch: Type Hints