lezione 07

dataclass e modellazione

modeling pulito, type hints e validazione leggera.

livello: base durata: 28 min output: modelli robusti badge: data modeling

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.

start a brief