Skip to content

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)


  • ✅ 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”)”
  1. Definire funzioni dentro funzioni
  2. Closure: funzione interna che cattura variabili della funzione esterna
  3. Utile per factory function e decoratori
def moltiplicatore(n):
def interna(x):
return x * n
return interna
per_2 = moltiplicatore(2)
per_3 = moltiplicatore(3)
print(per_2(5)) # 10
print(per_3(5)) # 15
  • Manuale → sezioni Funzioni annidate in Python e Chiusure in Python

Contenuti (dal manuale, sezione “Decoratori in Python”)

Section titled “Contenuti (dal manuale, sezione “Decoratori in Python”)”
  1. Decoratore: funzione che modifica un’altra funzione
  2. Sintassi @decoratore
  3. Esempi pratici: timer, logging, controllo accesso
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
@timer
def calcolo_lento():
somma = sum(range(1000000))
return somma
print(calcolo_lento())
  • Manuale → sezione Decoratori in Python

📅 Lezione 3 — Oggetti e Classi in Python

Section titled “📅 Lezione 3 — Oggetti e Classi in Python”
  • 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”)”
  1. Oggetti: ogni valore in Python è un oggetto con metodi
  2. Classi: blueprint per creare oggetti
  3. class NomeClasse:
  4. __init__: costruttore
  5. self: riferimento all’istanza corrente
  6. Attributi di istanza e di classe
  7. Metodi di istanza
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}"
# Uso
s = Studente("Alice", 20)
s.aggiungi_voto(28)
s.aggiungi_voto(30)
print(s.presentati())
print(f"Media: {s.media()}")
  • Manuale → sezioni Oggetti in Python e Classi in Python

"""
ESERCIZIO 1: Contatore con closure
Crea una funzione crea_contatore()
che restituisce una funzione interna.
Ogni chiamata incrementa e restituisce il contatore.
"""
"""
ESERCIZIO 2: Decoratore logger
Crea un decoratore @log che stampa
"Chiamata a nome_funzione con args=X, kwargs=Y"
prima di ogni chiamata.
"""
"""
ESERCIZIO 3: Classe Banca
Crea una classe ContoBancario con:
- __init__(titolare, saldo_iniziale=0)
- deposita(importo)
- preleva(importo)
- mostra_saldo()
Crea due conti e fai operazioni.
"""

DomandaRisposta
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