Classi E Oggetti In Python
Classi e Oggetti in Python¶
Obiettivi della Lezione¶
Al termine di questa lezione, sarai in grado di:
- Comprendere il concetto di classe e oggetto nella programmazione orientata agli oggetti (OOP) in Python.
- Definire una classe in Python utilizzando la sintassi corretta.
- Creare istanze (oggetti) di una classe.
- Distinguere tra attributi e metodi di una classe.
- Utilizzare il metodo speciale
__init__
(costruttore) per inizializzare gli oggetti. - Comprendere l’uso del parametro
self
nei metodi di classe. - Applicare i concetti di incapsulamento e modularità nel codice.
Introduzione¶
La programmazione orientata agli oggetti (OOP) è un paradigma che organizza il codice intorno a oggetti, che combinano dati e comportamenti correlati. In Python, le classi sono gli strumenti fondamentali per implementare l’OOP. Esse fungono da blueprint per creare oggetti che rappresentano entità del mondo reale o concetti astratti. Comprendere come funzionano classi e oggetti è essenziale per scrivere codice Python efficace, modulare e riutilizzabile.
class NomeClasse:
# Definizione degli attributi e dei metodi
Cos’è un Oggetto?¶
Un oggetto è un’istanza di una classe. Quando si crea un oggetto, si sta creando un’entità concreta basata sulla struttura definita dalla classe.
mio_oggetto = NomeClasse()
Attributi e Metodi¶
- Attributi: Variabili che appartengono a una classe o a un oggetto. Possono essere di classe (condivisi tra tutte le istanze) o di istanza (specifici per ogni oggetto).
- Metodi: Funzioni definite all’interno di una classe che descrivono i comportamenti degli oggetti.
Il Metodo __init__
(Costruttore)¶
Il metodo speciale __init__
viene chiamato automaticamente quando si crea una nuova istanza della classe. Viene utilizzato per inizializzare gli attributi dell’oggetto.
class NomeClasse:
def __init__(self, parametri):
# Inizializzazione degli attributi
Il Parametro self
¶
Il parametro self
rappresenta l’istanza corrente dell’oggetto ed è utilizzato per accedere agli attributi e ai metodi della classe. Deve essere il primo parametro in tutti i metodi di istanza.
class Animale:
def __init__(self, nome, specie):
self.nome = nome
self.specie = specie
# Creazione di un oggetto
animale1 = Animale("Fido", "Cane")
print(animale1.nome) # Output: Fido
print(animale1.specie) # Output: Cane
Fido Cane
Spiegazione:
- Definiamo la classe
Animale
con il metodo__init__
che inizializza gli attributinome
especie
. - Creiamo un’istanza
animale1
passando i valori pernome
especie
. - Utilizziamo
print
per accedere agli attributi dell’oggetto.
2. Aggiungere Metodi alla Classe¶
class Animale:
def __init__(self, nome, specie):
self.nome = nome
self.specie = specie
def descrivi(self):
print(f"{self.nome} è un {self.specie}.")
animale1 = Animale("Fido", "Cane")
animale1.descrivi() # Output: Fido è un Cane.
Fido è un Cane.
Spiegazione:
- Aggiungiamo il metodo
descrivi
che stampa una descrizione dell’animale. - Chiamiamo il metodo sull’oggetto
animale1
.
3. Attributi di Classe vs Attributi di Istanza¶
class Studente:
scuola = "Liceo Scientifico" # Attributo di classe
def __init__(self, nome):
self.nome = nome # Attributo di istanza
studente1 = Studente("Alice")
studente2 = Studente("Luca")
print(studente1.scuola) # Output: Liceo Scientifico
print(studente2.scuola) # Output: Liceo Scientifico
print(studente1.nome) # Output: Alice
print(studente2.nome) # Output: Luca
Liceo Scientifico Liceo Scientifico Alice Luca
Spiegazione:
scuola
è un attributo di classe condiviso da tutte le istanze diStudente
.nome
è un attributo di istanza specifico per ogni oggetto.
4. Utilizzo del Parametro self
¶
class ContoCorrente:
def __init__(self, titolare, saldo=0):
self.titolare = titolare
self.saldo = saldo
def deposita(self, importo):
self.saldo += importo
print(f"Depositati €{importo}. Nuovo saldo: €{self.saldo}.")
def preleva(self, importo):
if importo <= self.saldo:
self.saldo -= importo
print(f"Prelevati €{importo}. Nuovo saldo: €{self.saldo}.")
else:
print("Fondi insufficienti.")
conto1 = ContoCorrente("Giovanni")
conto1.deposita(1000)
conto1.preleva(500)
Depositati €1000. Nuovo saldo: €1000. Prelevati €500. Nuovo saldo: €500.
Spiegazione:
- Il parametro
self
viene utilizzato per accedere e modificare gli attributi dell’oggetto all’interno dei metodideposita
epreleva
. - Vengono eseguite operazioni sul saldo del conto.
class Rettangolo:
def __init__(self, larghezza, altezza):
self.larghezza = larghezza
self.altezza = altezza
def area(self):
return self.larghezza * self.altezza
def perimetro(self):
return 2 * (self.larghezza + self.altezza)
rettangolo1 = Rettangolo(5, 10)
print(f"Area: {rettangolo1.area()}") # Output: Area: 50
print(f"Perimetro: {rettangolo1.perimetro()}") # Output: Perimetro: 30
Area: 50 Perimetro: 30
Esercizio 2¶
Definisci una classe Cerchio
che prende il raggio come parametro. Aggiungi un metodo area
che calcola l’area del cerchio (usa π = 3.14).
Soluzione:
class Cerchio:
def __init__(self, raggio):
self.raggio = raggio
def area(self):
return 3.14 * (self.raggio ** 2)
cerchio1 = Cerchio(7)
print(f"Area del cerchio: {cerchio1.area()}") # Output: Area del cerchio: 153.86
Area del cerchio: 153.86
Buone Pratiche e Consigli¶
Nomi significativi: Dai nomi chiari e descrittivi a classi, metodi e attributi per migliorare la leggibilità del codice.
Incapsulamento: Mantieni gli attributi privati utilizzando un underscore
_
come prefisso (es._saldo
). Questo indica agli altri programmatori che tali attributi non dovrebbero essere modificati direttamente.Uso del parametro
self
: Ricorda sempre di includereself
come primo parametro nei metodi di istanza.Commenti e Docstring: Utilizza commenti e docstring per documentare il funzionamento delle tue classi e metodi.
Modularità: Organizza il codice in moduli e classi per favorire il riutilizzo e la manutenzione.
Conclusione¶
Le classi e gli oggetti sono fondamentali per approcciare la programmazione orientata agli oggetti in Python. Comprendere come definire classi, creare oggetti e utilizzare attributi e metodi ti permette di scrivere codice più strutturato e modulare. Applicando questi concetti, sarai in grado di modellare problemi complessi in modo più naturale e intuitivo, sfruttando appieno le potenzialità di Python.
Risorse Aggiuntive¶
- Documentazione Ufficiale Python: Classi
- Libro Consigliato: Python Crash Course di Eric Matthes
- Video Tutorial: Classes and Instances