Eine Dataclass definieren
Verwenden Sie @dataclass, um Boilerplate-Code zu vermeiden.
Eine Dataclass definieren ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Dataclasses?
Wenn Sie eine Klasse schreiben, die hauptsächlich Daten enthält, wiederholen Sie oft denselben Boilerplate-Code: ein __init__, ein __repr__ und ein __eq__. Das Modul dataclasses erzeugt all dies für Sie aus einfachen Feldd deklarationen.
- Weniger Code zum Schreiben und Lesen.
- Weniger Möglichkeiten für Tippfehler in
__init__. - Seit Python 3.7 in der Standardbibliothek enthalten.
Der herkömmliche Ansatz
Hier ist eine einfache Klasse, die einen Punkt speichert. Beachten Sie, wie viel Code erforderlich ist, nur um zwei Zahlen zu speichern.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)Der @dataclass-Dekorator
Wenden Sie @dataclass oberhalb einer Klasse an und deklarieren Sie Felder mit Typannotationen. Python erzeugt __init__ automatisch.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Automatisches __repr__
Dataclasses erzeugen außerdem ein lesbares __repr__, sodass beim Ausgeben des Objekts dessen Felder statt einer Speicheradresse angezeigt werden.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Automatisches __eq__
Zwei Dataclass-Instanzen sind gleich, wenn alle ihre Felder gleich sind. Sie müssen __eq__ nicht von Hand schreiben.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))Typannotationen sind erforderlich
Jedes Feld muss eine Typannotation haben. Die Annotation teilt der Dataclass-Mechanik mit, dass es sich bei dem Namen um ein Feld handelt. Eine Zuweisung ohne Annotation wird zu einem normalen Klassenattribut und nicht zu einem Feld.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Methoden hinzufügen
Eine Dataclass ist weiterhin eine normale Klasse. Sie können gewöhnliche Methoden hinzufügen, die die erzeugten Felder verwenden.
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
def area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.area())Felder verändern
Standardmäßig sind Dataclass-Instanzen veränderlich. Sie können Felder daher nach der Erstellung wie normale Attribute neu zuweisen.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict und astuple
Die Hilfsfunktionen asdict() und astuple() wandeln eine Instanz in ein Dictionary oder ein Tupel um, was für die Serialisierung praktisch ist.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Verschachtelte Dataclasses
Ein Dataclass-Feld kann selbst eine weitere Dataclass sein. Der erzeugte __repr__ und asdict() durchlaufen auch verschachtelte Strukturen rekursiv.
from dataclasses import dataclass, asdict
@dataclass
class Address:
city: str
@dataclass
class Person:
name: str
address: Address
p = Person('Bob', Address('Paris'))
print(asdict(p))Wann Sie Dataclasses verwenden sollten
Verwenden Sie eine Dataclass, wenn eine Klasse hauptsächlich zusammengehörige Werte bündelt.
- Konfigurationsobjekte.
- Von einer Funktion zurückgegebene Datensätze.
- Einfache Werttypen wie Koordinaten oder Geldbeträge.
Bei Klassen, die eher durch Verhalten als durch Daten geprägt sind, ist eine normale Klasse möglicherweise klarer.
Kurze Überprüfung
Was erzeugt der Dekorator @dataclass automatisch?
Zusammenfassung
Sie haben gelernt, mit @dataclass Boilerplate-Code zu vermeiden.
- Deklarieren Sie Felder mit Typannotationen.
__init__,__repr__und__eq__werden erzeugt.- Verwenden Sie
asdict()undastuple(), um Instanzen umzuwandeln. - Sie können weiterhin Methoden hinzufügen und Dataclasses verschachteln.
Häufig gestellte Fragen
Ist die Lektion „Eine Dataclass definieren“ kostenlos?
Ja — der vollständige Text von „Eine Dataclass definieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Eine Dataclass definieren“?
Verwenden Sie @dataclass, um Boilerplate-Code zu vermeiden. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Python Academy zu starten?
Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Eine Dataclass definieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?
Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Eine Dataclass definieren
- Standardwerte und field()
- Optionen für Unveränderlichkeit und Vergleiche
- Die attrs-Bibliothek