Programmazione a Oggetti
Funzioni (Parte 2) e Programmazione a Oggetti
Section titled “Funzioni (Parte 2) e Programmazione a Oggetti”Basato su: Manuale Python per principianti (freeCodeCamp)
🎯 Obiettivi del Modulo
Section titled “🎯 Obiettivi del Modulo”- ✅ Funzioni annidate e closure
- ✅ Decoratori (@)
- ✅ Oggetti, classi, costruttore init
- ✅ Attributi e metodi di istanza/classe
📅 Lezione 1 — Funzioni annidate e closure
Section titled “📅 Lezione 1 — Funzioni annidate e closure”Contenuti (dal manuale, sezioni “Funzioni annidate” e “Chiusure in Python”)
Section titled “Contenuti (dal manuale, sezioni “Funzioni annidate” e “Chiusure in Python”)”- Definire funzioni dentro funzioni
- Closure: funzione interna che cattura variabili della funzione esterna
- Utile per factory function e decoratori
Attività (esercizi)
Section titled “Attività (esercizi)”def moltiplicatore(n): def interna(x): return x * n return interna
per_2 = moltiplicatore(2)per_3 = moltiplicatore(3)
print(per_2(5)) # 10print(per_3(5)) # 15Riferimenti
Section titled “Riferimenti”- Manuale → sezioni Funzioni annidate in Python e Chiusure in Python
📅 Lezione 2 — Decoratori in Python
Section titled “📅 Lezione 2 — Decoratori in Python”Contenuti (dal manuale, sezione “Decoratori in Python”)
Section titled “Contenuti (dal manuale, sezione “Decoratori in Python”)”- Decoratore: funzione che modifica un’altra funzione
- Sintassi
@decoratore - Esempi pratici: timer, logging, controllo accesso
Attività (esercizi)
Section titled “Attività (esercizi)”def timer(func): import time def wrapper(*args, **kwargs): inizio = time.time() risultato = func(*args, **kwargs) fine = time.time() print(f"{func.__name__} eseguita in {fine-inizio:.4f}s") return risultato return wrapper
@timerdef calcolo_lento(): somma = sum(range(1000000)) return somma
print(calcolo_lento())Riferimenti
Section titled “Riferimenti”- Manuale → sezione Decoratori in Python
📅 Lezione 3 — Oggetti e Classi in Python
Section titled “📅 Lezione 3 — Oggetti e Classi in Python”Obiettivi specifici
Section titled “Obiettivi specifici”- Capire che “tutto è un oggetto” in Python
- Definire classi con attributi e metodi
- Usare il costruttore init
Contenuti (dal manuale, sezioni “Oggetti in Python” e “Classi in Python”)
Section titled “Contenuti (dal manuale, sezioni “Oggetti in Python” e “Classi in Python”)”- Oggetti: ogni valore in Python è un oggetto con metodi
- Classi: blueprint per creare oggetti
class NomeClasse:__init__: costruttoreself: riferimento all’istanza corrente- Attributi di istanza e di classe
- Metodi di istanza
Attività (esercizi)
Section titled “Attività (esercizi)”class Studente: # Attributo di classe scuola = "ITIS"
def __init__(self, nome, eta): # Attributi di istanza self.nome = nome self.eta = eta self.voti = []
def aggiungi_voto(self, voto): self.voti.append(voto)
def media(self): if not self.voti: return 0 return sum(self.voti) / len(self.voti)
def presentati(self): return f"Sono {self.nome}, ho {self.eta} anni, scuola: {self.scuola}"
# Usos = Studente("Alice", 20)s.aggiungi_voto(28)s.aggiungi_voto(30)print(s.presentati())print(f"Media: {s.media()}")Riferimenti
Section titled “Riferimenti”- Manuale → sezioni Oggetti in Python e Classi in Python
🏠 Esercizi per Casa
Section titled “🏠 Esercizi per Casa”"""ESERCIZIO 1: Contatore con closureCrea una funzione crea_contatore()che restituisce una funzione interna.Ogni chiamata incrementa e restituisce il contatore."""
"""ESERCIZIO 2: Decoratore loggerCrea un decoratore @log che stampa"Chiamata a nome_funzione con args=X, kwargs=Y"prima di ogni chiamata."""
"""ESERCIZIO 3: Classe BancaCrea una classe ContoBancario con:- __init__(titolare, saldo_iniziale=0)- deposita(importo)- preleva(importo)- mostra_saldo()Crea due conti e fai operazioni."""📊 Verifica Apprendimento
Section titled “📊 Verifica Apprendimento”| Domanda | Risposta |
|---|---|
| Cos’è una closure? | Funzione interna che cattura variabili esterne |
| A cosa serve un decoratore? | Modificare comportamento di una funzione |
| Sintassi decoratore? | @nome_decoratore sopra la funzione |
Cosa fa __init__? | Costruttore della classe |
Cosa rappresenta self? | L’istanza corrente della classe |