×

Guida completa a Python

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’oggetto
  • self rappresenta l’istanza corrente (come this 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/h
    • frena() ➝ 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)

Pagine: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19