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 razza.
  • Come metodi possiamo definire delle funzionalità di base, come ad esempio mangia e abbaia.
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.


Condividi sui Social