Tabella dei contenuti: Mostra/Chiudi
Python è un linguaggio di programmazione orientato agli oggetti(OOP).
In questa prima parte dedicata alla programmazione ad oggetti imparerai le nozioni di base riguardanti le classi e gli oggetti in Python.
Classi
La classe, nei linguaggi di programmazione, è un tipo di dato che serve a rappresentare un entità astratta.
La classe viene utilizzata quindi come modello per creare un oggetto. Ogni modello definisce attributi e metodi che possono essere utilizzati dagli oggetti creati(istanziati) a partire dalla classe.
Mettiamo ad esempio che vogliamo rappresentare tramite una classe il cane:
- Come attributi potremmo definire
nome
erazza
. - Come metodi possiamo definire delle funzionalità di base, come ad esempio
mangia
eabbaia
.
class Cane:
def __init__(self, nome, razza):
self.nome = nome
self.razza = razza
self.appetito = 2
def mangia():
print("gnam gnam")
def abbaia():
print("wouf wouf")
In questo snippet ho creato la classe Cane e, nel metodo __init__(il costruttore), ho definito gli attributi nome
e razza
, infine ho definito anche l'attributo appetito
, che ci servirà più avanti.
Oggetti
L'oggetto è un'istanza univoca di una classe ed ha accesso ai suoi attributi e metodi.
In Python per creare un oggetto basta indicare il nome della classe a cui si riferisce e tra le parentesi tonde passare(se ci sono) i parametri che richiede il costruttore(nel nostro caso nome e razza).
Andiamo ora a creare(istanziare) qualche oggetto di tipo Cane
in Python:
class Cane:
def __init__(self, nome, razza):
self.nome = nome
self.razza = razza
self.appetito = 2
def mangia(self):
print("gnam gnam")
def abbaia(self):
print("wouf wouf")
def corri(self):
print("{} sta correndo".format(self.nome))
pluto = Cane("Pluto", "Alano")
pippo = Cane("Pippo", "Bassotto")
bruto = Cane("Bruto", "Pastore Tedesco")
print("{} e' un {}".format(pluto.nome, pluto.razza))
print("{} e' un {}".format(pippo.nome, pippo.razza))
print("{} e' un {}".format(bruto.nome, bruto.razza))
bruto.mangia()
bruto.mangia()
bruto.mangia()
#output
gnam gnam
gnam gnam
gnam gnam
Pluto e' un Alano
Pippo e' un Bassotto
Bruto e' un Pastore Tedesco
Ottimo, abbiamo istanziato tre oggetti dalla classe Cane e possiamo utilizzare i loro attributi e metodi con estrema facilità.
Facciamo un pò di pratica
Per come è definito il metodo mangia()
, possiamo potenzialmente dar da mangiare ai nostri cani fino all'infinito, il che non è molto salutare. Cosa potremmo fare per impedire che ciò accada?
Beh possiamo implementare un semplice sistema che regola l'appetito dei nostri cagnolini.
Se ricordi, oltre agli attributi nome
e razza
, avevo definito anche l'attributo appetito
. Possiamo definire un nuovo metodo che stabilisce se il nostro cane ha appetito, dopodichè andiamo a modificare il metodo mangia()
e come prima cosa verifichiamo se il nostro animale a quattro zampe ha appetito. Infine, se il cane ha appetito, lo facciamo mangiare e diminuiamo di 1 l'appetito, altrimenti non facciamo nulla.
class Cane:
def __init__(self, nome, razza):
self.nome = nome
self.razza = razza
self.appetito = 2
def mangia(self):
if(self.ha_appetito()):
print("gnam gnam")
self.appetito -= 1
else:
print("{} non ha molto appetito, prova a farlo stancare!".format(self.nome))
def abbaia(self):
print("wouf wouf")
def ha_appetito(self):
return self.appetito > 1
bruto = Cane("Bruto", "Pastore Tedesco")
bruto.mangia()
bruto.mangia()
bruto.mangia()
#output
gnam gnam
Bruto non ha molto appetito, prova a farlo stancare!
Bruto non ha molto appetito, prova a farlo stancare!
Aggiungiamo ora il metodo corri()
per fare stancare il cane:
class Cane:
def __init__(self, nome, razza):
self.nome = nome
self.razza = razza
self.appetito = 2
def mangia(self):
if(self.ha_appetito()):
print("gnam gnam")
self.appetito -= 1
else:
print("{} non ha molto appetito, prova a farlo stancare!".format(self.nome))
def abbaia(self):
print("wouf wouf")
def ha_appetito(self):
return self.appetito > 1
def corri(self):
self.appetito += 1
print("{} sta correndo".format(self.nome))
bruto = Cane("Bruto", "Pastore Tedesco")
bruto.mangia()
bruto.mangia()
bruto.mangia()
bruto.corri()
bruto.corri()
bruto.mangia()
bruto.mangia()
bruto.mangia()
#output
gnam gnam
Bruto non ha molto appetito, prova a farlo stancare!
Bruto non ha molto appetito, prova a farlo stancare!
Bruto sta correndo
Bruto sta correndo
gnam gnam
gnam gnam
Bruto non ha molto appetito, prova a farlo stancare!
Conclusione
Nei successivi tutorial andremo a vedere tutte le altre caratteristiche delle classi e degli oggetti in Python.