Das Dataclasses-Modul von Python vereinfacht die Erstellung von Klassen, die zum Speichern von Daten verwendet werden.
Während die meisten Leute über die grundlegende Verwendung Bescheid wissen, gibt es ein weniger bekanntes Funktionsfeld (default_factory=...), das für die Handhabung von Standardwerten in veränderbaren Typen unglaublich nützlich sein kann.
Beim Definieren einer Datenklasse möchten Sie möglicherweise einen veränderlichen Standardwert verwenden, z. B. eine Liste oder ein Wörterbuch.
Die direkte Verwendung eines veränderlichen Standardwerts kann aufgrund der Art und Weise, wie Standardargumente in allen Instanzen gemeinsam genutzt werden, zu unerwartetem Verhalten führen.
Die Funktion „default_factory“ bietet eine saubere Möglichkeit, veränderliche Standardeinstellungen zu verarbeiten.
Hier ist ein einfaches Beispiel:
from dataclasses import dataclass, field from typing import List @dataclass class Student: name: str grades: List[int] = field(default_factory=list) # Use default_factory for mutable default # Create new Student instances student1 = Student(name="Alice") student2 = Student(name="Bob", grades=[90, 85]) # Modify student1's grades student1.grades.append(95) print(student1) # Output: Student(name='Alice', grades=[95]) print(student2) # Output: Student(name='Bob', grades=[90, 85]) # Output: # Student(name='Alice', grades=[95]) # Student(name='Bob', grades=[90, 85])
In diesem Beispiel wird „notes“ mit einer leeren Liste für jede neue Student-Instanz initialisiert.
Durch die Verwendung von field(default_factory=list) wird sichergestellt, dass jede Instanz ihre eigene separate Liste erhält, wodurch die Fallstricke gemeinsamer änderbarer Standardeinstellungen vermieden werden.
Die Funktion „default_factory“ ist von unschätzbarem Wert, um häufige Probleme mit veränderlichen Standardargumenten zu vermeiden.
Es hilft sicherzustellen, dass jede Instanz einer Datenklasse ihren eigenen Standardwert hat, wodurch Ihr Code vorhersehbarer wird und subtile Fehler im Zusammenhang mit dem gemeinsamen Status vermieden werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3