

Bild von Autor | Leinwand
# Einführung
Das Schreiben von Kursen in Python kann sich sehr schnell wiederholen. Sie hatten wahrscheinlich Momente, in denen Sie eine definieren __init__ Methode, a __repr__ Methode, vielleicht sogar __eq__nur um deine Klasse nutzbar zu machen – und du bist wie. „Warum schreibe ich immer wieder die gleiche Kesselplatte?“
Hier ist Python DataClass kommt herein. Es ist Teil der Standardbibliothek und hilft Ihnen, sauberere, lesbare Klassen mit viel weniger Code zu schreiben. Wenn Sie mit Datenobjekten arbeiten – ähnlich wie Konfigurationen, Modelle oder sogar nur ein paar Felder zusammen – zusammen – dataclass ist ein Recreation-Changer. Vertrauen Sie mir, dies ist nicht nur eine weitere überhypte Funktion – es funktioniert tatsächlich. Lassen Sie es uns Schritt für Schritt aufschlüsseln.
# Was ist a dataclass?
A dataclass ist ein Python -Dekorateur, der automatisch Kesselplattencode für Klassen generiert, wie __init__Anwesend __repr__Anwesend __eq__und mehr. Es ist Teil des DataClasses -Moduls und eignet sich perfekt für Klassen, die hauptsächlich Daten speichern (denken Sie an: Objekte, die Mitarbeiter, Produkte oder Koordinaten darstellen). Anstatt sich wiederholende Methoden manuell zu schreiben, definieren Sie Ihre Felder und schlagen Sie auf die @dataclass Dekorateur und Python machen das schwere Heben. Warum solltest du dich interessieren? Da es Ihnen Zeit spart, Fehler verringert und Ihren Code leichter zu warten.
# Der alte Weg: Unterricht manuell schreiben
Folgendes tun Sie heute vielleicht, wenn Sie nicht verwenden dataclass:
class Consumer:
def __init__(self, identify, age, is_active):
self.identify = identify
self.age = age
self.is_active = is_active
def __repr__(self):
return f"Consumer(identify={self.identify}, age={self.age}, is_active={self.is_active})"
Es ist nicht schrecklich, aber es ist ausführlich. Selbst für eine einfache Klasse schreiben Sie bereits die Konstruktor- und String -Darstellung manuell. Und wenn Sie Vergleiche benötigen (==), müssen Sie schreiben __eq__ zu. Stellen Sie sich vor, Sie fügen mehr Felder hinzu oder schreiben zehn ähnliche Klassen – Ihre Finger würden Sie hassen.
# Die DataClass -Artwork (auch bekannt als der bessere Weg)
Nun, hier ist dasselbe, was benutzt dataclass:
from dataclasses import dataclass
@dataclass
class Consumer:
identify: str
age: int
is_active: bool
Das conflict’s. Python fügt automatisch das hinzu __init__Anwesend __repr__Und __eq__ Methoden für Sie unter der Motorhaube. Testen wir es:
# Create three customers
u1 = Consumer(identify="Ali", age=25, is_active=True)
u2 = Consumer(identify="Almed", age=25, is_active=True)
u3 = Consumer(identify="Ali", age=25, is_active=True)
# Print them
print(u1)
# Examine them
print(u1 == u2)
print(u1 == u3)
Ausgabe:
Consumer(identify="Ali", age=25, is_active=True)
False
True
# Zusätzliche Funktionen angeboten von dataclass
// 1. Hinzufügen von Standardwerten
Sie können Standardwerte genau wie in Funktionsargumenten festlegen:
@dataclass
class Consumer:
identify: str
age: int = 25
is_active: bool = True
u = Consumer(identify="Alice")
print(u)
Ausgabe:
Consumer(identify="Alice", age=25, is_active=True)
Professional -Tipp: Wenn Sie Standardwerte verwenden, geben Sie diese Felder nach nicht defekten Feldern in die Klassendefinition ein. Python setzt dies durch, um Verwirrung zu vermeiden (genau wie Funktionsargumente).
// 2. Felder elective machen (mit Verwendung area())
Wenn Sie mehr Kontrolle wünschen – sagen Sie, Sie möchten nicht, dass ein Feld enthalten ist __repr__oder Sie möchten nach der Initialisierung eine Standardeinstellung festlegen – Sie können verwenden area():
from dataclasses import dataclass, area
@dataclass
class Consumer:
identify: str
password: str = area(repr=False) # Conceal from __repr__
Jetzt:
print(Consumer("Alice", "supersecret"))
Ausgabe:
Ihr Passwort ist nicht freigelegt. Sauber und sicher.
// 3. Unveränderliche Datenaklasse (wie namedtupleaber besser)
Wenn Sie möchten, dass Ihre Klasse nur schreibgeschützt ist (dh die Werte können nach der Erstellung nicht geändert werden), fügen Sie einfach hinzu frozen=True:
@dataclass(frozen=True)
class Config:
model: str
debug: bool
Versuch, ein Objekt der Konfiguration zu ändern, wie config.debug = False Erhöhe nun einen Fehler: FrozenInstanceError: can't assign to area 'debug'. Dies ist nützlich für Konstanten oder App -Einstellungen, in denen Unveränderlichkeit wichtig ist.
// 4. Zeichnen Sie DataClasses
Ja, Sie können sie auch nisten:
@dataclass
class Handle:
metropolis: str
zip_code: int
@dataclass
class Buyer:
identify: str
deal with: Handle
Beispiel Verwendung:
addr = Handle("Islamabad", 46511)
cust = Buyer("Qasim", addr)
print(cust)
Ausgabe:
Buyer(identify="Qasim", deal with=Handle(metropolis='Islamabad', zip_code=46511))
# Professional -Tipp: Verwenden asdict() zur Serialisierung
Sie können a konvertieren dataclass In ein Wörterbuch leicht:
from dataclasses import asdict
u = Consumer(identify="Kanwal", age=10, is_active=True)
print(asdict(u))
Ausgabe:
{'identify': 'Kanwal', 'age': 10, 'is_active': True}
Dies ist nützlich, wenn Sie mit APIs arbeiten oder Daten in Datenbanken speichern.
# Wenn nicht verwendet werden dataclass
Während dataclass ist erstaunlich, es ist nicht immer das richtige Werkzeug für den Job. Hier sind einige Szenarien, in denen Sie es vielleicht überspringen möchten:
- Wenn Ihre Klasse mehr verhaltenslastend ist (dh mit Methoden gefüllt und nicht nur zu Attributen), dann dann
dataclasskönnte nicht viel Wert hinzufügen. Es wurde hauptsächlich für Datencontainer, nicht für Serviceklassen oder eine komplexe Geschäftslogik erstellt. - Sie können die automatisch generierten Dunder-Methoden wie überschreiben
__init__Anwesend__eq__Anwesend__repr__usw., aber wenn Sie es oft tun, brauchen Sie vielleicht keinedataclassüberhaupt. Vor allem, wenn Sie Validierungen, benutzerdefinierte Setups oder eine knifflige Abhängigkeitsinjektion durchführen. - Für leistungskritische Code (denken Sie: Spiele, Compiler, Hochfrequenzhandel), jedes Byte- und Zyklus ist wichtig.
dataclassFügt einen kleinen Overhead für alle automatisch generierten Magie hinzu. Gehen Sie in diesen Randfällen mit manuellen Unterrichtsdefinitionen und fein abgestimmten Methoden.
# Letzte Gedanken
Python dataclass Ist nicht nur syntaktischer Zucker – er macht Ihren Code tatsächlich lesbar, Testbarer und wartbarer. Wenn Sie sich mit Objekten befassen, die meistens Daten speichern und umgeben, gibt es quick keinen Grund, sie nicht zu verwenden. Wenn Sie tiefer lernen möchten, lesen Sie die offizielle Python -Dokumente oder experimentieren Sie mit fortgeschrittenen Merkmalen. Und da es Teil der Standardbibliothek ist, gibt es keine zusätzlichen Abhängigkeiten. Sie können es einfach importieren und gehen.
Kanwal Mehreen ist ein Ingenieur für maschinelles Lernen und technischer Schriftsteller mit einer tiefgreifenden Leidenschaft für die Datenwissenschaft und die Schnittstelle von KI mit Medizin. Sie hat das eBook „Produktivität mit Chatgpt maximieren“. Als Google -Era -Gelehrte 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie wird auch als Teradata -Vielfalt in Tech Scholar, MITACS Globalink Analysis Scholar und Harvard Wecode Scholar anerkannt. Kanwal ist ein leidenschaftlicher Verfechter der Veränderung, nachdem er Femcodes gegründet hat, um Frauen in STEM -Bereichen zu stärken.
