Modulul dataclasses a transformat modul în care dezvoltatorii Python creează structuri de date, generând automat metodele standard __init__, __repr__ și __eq__. În versiunile recente (Python 3.10+), decoratorul @dataclass a primit parametri critici pentru performanță extremă și arhitectură sigură: slots=True și kw_only=True.
from dataclasses import dataclass
# În mod normal, fiecare instanță Python deține un dicționar '__dict__' intern,
# care consumă memorie RAM și încetinește accesul la atribute.
# Cu slots=True, atributele sunt stocate într-un vector C compact cu dimensiune fixă:
@dataclass(slots=True)
class PunctSenzor:
timestamp: int
temperatura: float
umiditate: float
# Comparație memorie pe 1.000.000 de instanțe:
# Fără slots: ~160 MB RAM
# Cu slots=True: ~48 MB RAM (o economie de peste 65% din memorie!)
Parametrul kw_only=True (Keyword-Only Arguments)
În echipe mari și cod de producție, crearea de obiecte cu argumente poziționale nespecificate (ex: Tranzactie(105, 500.0, True, False)) este o sursă garantată de bug-uri, deoarece dezvoltatorii pot inversa cu ușurință ordinea parametrilor booleeni. Setând kw_only=True, compilatorul forțează transmiterea numelui fiecărui parametru:
@dataclass(kw_only=True)
class ContClient:
id: int
nume: string
este_activ: bool = True
balanta: float = 0.0
# apel_gresit = ContClient(101, "Dan", True, 250.0)
# TypeError: ContClient.__init__() takes 1 positional argument but 5 were given!
# APEL CORECT ȘI SIGUR:
client = ContClient(id=101, nume="Dan", balanta=250.0)
Alte Opțiuni Esențiale în @dataclass
frozen=True: Face instanța complet imuabilă după creare. Orice reatribuire (obj.val = 10) aruncăFrozenInstanceError. Obiectele înghețate generează automat metoda__hash__, putând fi folosite ca chei în dicționare sau elemente înset-uri!order=True: Generează automat metodele de comparare<,<=,>,>=pe baza ordinii de declarare a atributelor, permițând sortarea directă cusorted(lista_obiecte).