Guida completa a Python
📘 Capitolo 9 – OOP: Programmazione a Oggetti in Python
1. Cos’è la OOP?
La OOP ti permette di:
- Rappresentare concetti come oggetti
- Usare classi come “modelli” (es. una classe Persona)
- Incapsulare dati + comportamenti insieme
- Rendere il codice più riutilizzabile e modulare
2. Creare una classe base
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
def saluta(self):
print(f"Ciao! Sono {self.nome} e ho {self.eta} anni.")
__init__
è il costruttore: viene chiamato quando crei l’oggettoself
rappresenta l’istanza corrente (comethis
in altri linguaggi)nome
,eta
sono attributi
3. Creare e usare oggetti (istanze)
persona1 = Persona("Luca", 30)
persona2 = Persona("Anna", 25)
persona1.saluta() # ➝ Ciao! Sono Luca e ho 30 anni.
persona2.saluta() # ➝ Ciao! Sono Anna e ho 25 anni.
4. Aggiungere metodi
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
def invecchia(self):
self.eta += 1
pythonCopiaModificapersona1.invecchia()
persona1.saluta() # ➝ Ho 31 anni
5. Ereditarietà
Una classe può ereditarne un’altra, e quindi riutilizzare/estendere il comportamento.
class Studente(Persona):
def __init__(self, nome, eta, scuola):
super().__init__(nome, eta)
self.scuola = scuola
def info(self):
print(f"{self.nome} frequenta {self.scuola}.")
pythonCopiaModificastudente1 = Studente("Marco", 20, "Università di Roma")
studente1.saluta()
studente1.info()
6. Metodi speciali (dunder methods)
__init__
– costruttore__str__
– rappresentazione testuale__len__
,__eq__
,__lt__
, ecc.
class Libro:
def __init__(self, titolo, pagine):
self.titolo = titolo
self.pagine = pagine
def __str__(self):
return f"📖 {self.titolo} - {self.pagine} pagine"
libro = Libro("Python Facile", 200)
print(libro) # ➝ 📖 Python Facile - 200 pagine
7. Incapsulamento
Con un “_” davanti al nome, si indica un attributo “privato” (per convenzione).
class Conto:
def __init__(self, saldo):
self._saldo = saldo
def deposito(self, valore):
self._saldo += valore
def saldo(self):
return self._saldo
🧪 Esercizio pratico
Creare una classe Auto
con:
- Attributi:
marca
(es. “Fiat”)modello
(es. “Panda”)velocità
iniziale (es. 0 km/h)
- Metodi:
accelera()
➝ aumenta la velocità di 10 km/hfrena()
➝ diminuisce la velocità di 10 km/h (mai sotto 0)stato()
➝ stampa marca, modello e velocità attuale
Soluzione in Python
class Auto:
def __init__(self, marca, modello):
self.marca = marca
self.modello = modello
self.velocita = 0 # km/h iniziale
def accelera(self):
self.velocita += 10
print("🚀 Accelerazione!")
def frena(self):
if self.velocita >= 10:
self.velocita -= 10
print("🛑 Frenata.")
else:
self.velocita = 0
print("🚗 L'auto è già ferma.")
def stato(self):
print(f"{self.marca} {self.modello} ➝ Velocità attuale: {self.velocita} km/h")
Cosa hai imparato qui:
- Come creare una classe con stato
- Come definire comportamenti (metodi)
- Come aggiornare gli attributi dell’oggetto
- Concetto di incapsulamento (es. controllo velocità minima)