intro
le dataclass riducono boilerplate e rendono esplicita la struttura dei dati.
usa frozen=True per modelli immutabili quando possibile.
dataclass base
definisci attributi e tipi per generare init, repr e confronto.
from dataclasses import dataclass
@dataclass
class project:
name: str
status: str = "draft"
opzioni avanzate
usa default_factory per liste e order=True per sorting.
from dataclasses import dataclass, field
@dataclass(order=True)
class board:
name: str
cards: list[str] = field(default_factory=list)
validazione leggera
usa __post_init__ per controlli e normalizzazioni.
@dataclass
class user:
email: str
def __post_init__(self):
if "@" not in self.email:
raise ValueError("email non valida")
esercizi
modella un sistema di task con dataclass immutabili.
aggiungi metodi di serializzazione a json.
checklist
- usa typing ovunque
- evita default mutabili
- frozen per modelli immutabili
- valida in post_init
panoramica
In questo capitolo su dataclass e modellazione, modeling pulito, type hints e validazione leggera. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: data modeling
obiettivi
- capire e applicare intro in uno scenario reale
- capire e applicare base in uno scenario reale
- capire e applicare opzioni in uno scenario reale
- capire e applicare validazione in uno scenario reale
scheda rapida
def main():
dati = [1, 2, 3]
risultati = [x * 2 for x in dati]
print(risultati)
if __name__ == "__main__":
main()
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- usa un venv per ogni progetto
- separa logica e I/O
- mantieni funzioni piccole e nominative
- usa frozen=True per immutabilità
- preferisci default_factory per liste
- usa __post_init__ per validazioni
tip: Se la classe ha molta logica, non è più una dataclass.
mini progetto
Modella un record di produzione con dataclass.
- crea Shot con campi tipizzati
- aggiungi default e immutabilità
- aggiungi metodo di serializzazione
- stampa un riepilogo
output atteso: uno script o query ripetibile con risultati verificabili.