Standardwerte und field()
Legen Sie Standardwerte fest und verwenden Sie Optionen von field().
Standardwerte und field() ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Standardwerte für Felder festlegen
Wie Funktionsparameter können auch Dataclass-Felder Standardwerte haben. Ein Feld mit einem Standardwert kann beim Erstellen einer Instanz weggelassen werden.
from dataclasses import dataclass
@dataclass
class Server:
host: str
port: int = 8080
print(Server('localhost'))
print(Server('example.com', 443))Die Reihenfolge ist wichtig
Felder mit Standardwerten müssen nach Feldern ohne Standardwerte stehen, genau wie Funktionsargumente. Andernfalls löst Python bei der Definition der Klasse einen TypeError aus.
from dataclasses import dataclass
@dataclass
class User:
name: str # required
active: bool = True # optional
print(User('Alice'))Die Falle mit veränderlichen Standardwerten
Sie können kein veränderliches Objekt wie eine Liste oder ein Dictionary direkt als Standardwert verwenden. Alle Instanzen würden dasselbe Objekt gemeinsam nutzen. Python erkennt dies und löst zu Ihrem Schutz einen ValueError aus.
from dataclasses import dataclass
from typing import List
# This raises ValueError at class definition time:
try:
@dataclass
class Bad:
items: List[int] = []
except ValueError as e:
print('Error:', e)field(default_factory=...)
Verwenden Sie für einen veränderlichen Standardwert field(default_factory=...). Die Factory wird für jede neue Instanz aufgerufen, sodass jede Instanz ihr eigenes neues Objekt erhält.
from dataclasses import dataclass, field
from typing import List
@dataclass
class Cart:
items: List[str] = field(default_factory=list)
a = Cart()
a.items.append('apple')
b = Cart()
print(a.items, b.items)default vs default_factory
Verwenden Sie field(default=...) für unveränderliche Werte, wenn Sie zugleich weitere Optionen von field() benötigen. Verwenden Sie default_factory für alles Veränderliche. Sie können nicht beides gleichzeitig übergeben.
from dataclasses import dataclass, field
@dataclass
class Config:
retries: int = field(default=3)
tags: list = field(default_factory=list)
print(Config())Ein Feld aus repr ausschließen
Die Option repr=False blendet ein Feld aus dem erzeugten __repr__ aus. Das ist für Geheimnisse oder große interne Puffer nützlich.
from dataclasses import dataclass, field
@dataclass
class Account:
user: str
token: str = field(repr=False, default='secret')
print(Account('alice'))Ein Feld aus Vergleichen ausschließen
Mit compare=False wird ein Feld vom erzeugten __eq__ (und von der Sortierung) ausgeschlossen. Zwei Instanzen können gleich sein, auch wenn sich dieses Feld unterscheidet.
from dataclasses import dataclass, field
@dataclass
class Event:
name: str
timestamp: float = field(compare=False, default=0.0)
print(Event('login', 1.0) == Event('login', 99.0))init=False-Felder
Wenn Sie init=False setzen, wird ein Feld aus __init__ ausgeschlossen. In der Regel kombinieren Sie dies mit einem Standardwert oder setzen das Feld in __post_init__.
from dataclasses import dataclass, field
@dataclass
class Circle:
radius: float
area: float = field(init=False, default=0.0)
c = Circle(2.0)
print(c)__post_init__ für abgeleitete Werte
Definieren Sie __post_init__, um Code direkt nach dem erzeugten __init__ auszuführen. Dort können Sie auf natürliche Weise Felder berechnen, die von anderen Feldern abgeleitet sind.
from dataclasses import dataclass, field
@dataclass
class Circle:
radius: float
area: float = field(init=False, default=0.0)
def __post_init__(self):
self.area = 3.14159 * self.radius ** 2
print(Circle(2.0))Metadaten speichern
Das Argument metadata fügt einem Feld eine beliebige Zuordnung hinzu. Python ignoriert sie, aber Tools und Ihr eigener Code können sie für Dokumentations- oder Validierungshinweise auslesen.
from dataclasses import dataclass, field, fields
@dataclass
class Product:
price: float = field(metadata={'unit': 'USD'})
for f in fields(Product):
print(f.name, f.metadata)field()-Optionen kombinieren
Die Optionen lassen sich kombinieren. Ein einzelnes Feld kann gleichzeitig in repr ausgeblendet, von Vergleichen ausgeschlossen und mit einem Standardwert versehen werden.
from dataclasses import dataclass, field
@dataclass
class Session:
user: str
token: str = field(default='x', repr=False, compare=False)
print(Session('alice'))
print(Session('alice') == Session('alice', token='different'))Kurze Überprüfung
Wie geben Sie einem Dataclass-Feld eine standardmäßige leere Liste?
Zusammenfassung
Sie haben gelernt, Standardwerte festzulegen und die Optionen von field() zu verwenden.
- Felder mit Standardwerten kommen nach den erforderlichen Feldern.
- Verwenden Sie
default_factoryfür veränderliche Standardwerte. - Mit
repr,compare,initundmetadatapassen Sie jedes Feld an. __post_init__berechnet abgeleitete Werte.
Häufig gestellte Fragen
Ist die Lektion „Standardwerte und field()“ kostenlos?
Ja — der vollständige Text von „Standardwerte und field()“ 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 „Standardwerte und field()“?
Legen Sie Standardwerte fest und verwenden Sie Optionen von field(). 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 2 von 4.
Wie lange dauert die Lektion „Standardwerte und field()“?
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