0Pricing
Python Academy · Lektion

Die attrs-Bibliothek

attrs mit dataclasses vergleichen

Die attrs-Bibliothek ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Was ist attrs?

attrs ist eine Bibliothek eines Drittanbieters, die das Konzept „Klasse aus Feldern“ bereits Jahre vor der Aufnahme von dataclasses in die Standardbibliothek eingeführt hat. Das Standardmodul dataclasses wurde direkt davon inspiriert.

  • attrs muss separat installiert werden: pip install attrs.
  • Es bietet mehr Funktionen als dataclasses.
  • dataclasses ist integriert und deckt die meisten alltäglichen Anforderungen ab.

Die moderne attrs-API

Modernes attrs verwendet @define und field() aus dem Namensraum attrs. Der Aufbau ähnelt stark dem einer Dataclass.

from attrs import define, field

@define
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)

Slots standardmäßig

Ein großer Unterschied: Klassen mit @define verwenden automatisch __slots__. Das senkt den Speicherverbrauch und verhindert, dass versehentlich nicht deklarierte Attribute hinzugefügt werden. Normale Dataclasses verwenden ein reguläres __dict__, sofern Sie nicht slots=True übergeben (Python 3.10+).

Integrierte Validatoren

attrs wird mit fertigen Validatoren ausgeliefert. Ein Feld kann einen Validator deklarieren, der bei der Erstellung ausgeführt wird und eine Ausnahme auslöst, wenn der Wert ungültig ist. Dataclasses verfügen über keine integrierte Validierung; Sie schreiben sie selbst in __post_init__.

from attrs import define, field
from attrs.validators import instance_of

@define
class User:
    age: int = field(validator=instance_of(int))

User(30)        # ok
User('oops')    # raises TypeError

Konverter

Ein Konverter wandelt den Eingabewert um, bevor er gespeichert wird. Sie können beispielsweise automatisch eine Zeichenkette in eine Ganzzahl umwandeln. Diese Funktion fehlt dataclasses ebenfalls.

from attrs import define, field

@define
class Item:
    price: int = field(converter=int)

i = Item('42')   # stored as the integer 42
print(i.price)

Das Dataclass-Äquivalent

Hier wird dasselbe Konzept mit der Standardbibliothek umgesetzt. Da Dataclasses keine Hooks pro Feld anbieten, müssen Sie Validierung und Konvertierung von Hand in __post_init__ einfügen.

from dataclasses import dataclass

@dataclass
class Item:
    price: int

    def __post_init__(self):
        self.price = int(self.price)

print(Item('42'))

asdict in beiden Bibliotheken

Beide Bibliotheken bieten eine asdict-Hilfsfunktion. Die Version für Dataclasses befindet sich in dataclasses, die Version für attrs in attrs. Das Verhalten ist nahezu identisch.

from dataclasses import dataclass, asdict

@dataclass
class Point:
    x: int
    y: int

print(asdict(Point(1, 2)))

Unveränderlichkeit in attrs

Auch attrs unterstützt Unveränderlichkeit. Verwenden Sie @frozen (eine Kurzform für @define(frozen=True)) für schreibgeschützte Instanzen – analog zu @dataclass(frozen=True).

from attrs import frozen

@frozen
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)
# p.x = 9  would raise FrozenInstanceError

Funktionsvergleich

Die Unterschiede im Überblick:

  • dataclasses: Standardbibliothek, keine Installation erforderlich, deckt die Grundlagen ab.
  • attrs: Validatoren, Konverter, Slots standardmäßig und mehr Konfigurationsmöglichkeiten.
  • Beide erzeugen __init__, __repr__ und __eq__.

Welche Bibliothek sollten Sie verwenden?

Wählen Sie dataclasses für einfache Datenhalter ohne zusätzliche Abhängigkeit. Wählen Sie attrs, wenn Sie Validatoren, Konverter oder die umfangreicheren Konfigurationsmöglichkeiten benötigen und bereit sind, eine Abhängigkeit hinzuzufügen. Viele Projekte beginnen mit dataclasses und wechseln erst dann, wenn deren Möglichkeiten nicht mehr ausreichen.

Eine gemeinsame Herkunft

Da dataclasses vieles von attrs übernommen hat, ist der Wechsel zwischen beiden Bibliotheken meist eine mechanische Anpassung: Tauschen Sie Import und Decorator aus und passen Sie Validatoren oder Konverter an. Wenn Sie eine der beiden Bibliotheken kennen, ist die andere sofort vertraut.

  • @define entspricht @dataclass.
  • attrs.field entspricht dataclasses.field.
  • Beim Wechsel zu Dataclasses werden Validatoren in __post_init__ verschoben.

Kurzer Test

Welche Funktion bietet attrs, die das Standardmodul dataclasses nicht integriert bereitstellt?

Zusammenfassung

Sie haben attrs mit dataclasses verglichen.

  • attrs hat dataclasses inspiriert und bietet mehr Funktionen.
  • attrs ergänzt Validatoren, Konverter und Slots standardmäßig.
  • dataclasses ist integriert und muss nicht installiert werden.
  • Wählen Sie das einfachste Werkzeug, das Ihre Anforderungen erfüllt.

Häufig gestellte Fragen

Ist die Lektion „Die attrs-Bibliothek“ kostenlos?

Ja — der vollständige Text von „Die attrs-Bibliothek“ 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 „Die attrs-Bibliothek“?

attrs mit dataclasses vergleichen 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 4 von 4.

Wie lange dauert die Lektion „Die attrs-Bibliothek“?

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

  1. Eine Dataclass definieren
  2. Standardwerte und field()
  3. Optionen für Unveränderlichkeit und Vergleiche
  4. Die attrs-Bibliothek
← Zurück zu Python Academy