![Lezioni di Python - 7.1 Classi](https://www.meccanismocomplesso.org/wp-content/uploads/2018/04/Lezioni-di-Python-7.1-Classi-1024x198.jpg)
Le classi
Finora abbiamo visto la programmazione seguendo due diversi paradigmi:
- imperativo: utilizzando dichiarazioni, cicli, funzioni
- funzionale: funzioni pure, funzioni high-order e ricorsioni
Un altro paradigma di programmazione è la programmazione orientata agli oggetti, object-oriented programming (OOP).
Gli oggetti vengono creati utilizzando le classi che sono il fulcro di tutta la programmazione orientata agli oggetti.
Una classe definisce un oggetto e si usa la clausola class per indicarli. Il modo corretto di definire una classe è il seguente:
class Oggetto:
def __init__(self, prop1, prop2):
self.prop1 = prop1
self.prop2 = prop2
Vediamo un esempio:
class Auto:
def __init__(self, colore, prezzo):
self.colore = colore
self.prezzo = prezzo
bmw = Auto("rosso",40000)
fiat500 = Auto("bianco",20000)print(bmw.colore)
print(fiat500.prezzo)
eseguendo >>>
rosso
20000
Tutti i metodi all’interno di una classe devono avere self come primo argomento. Al momento della chiamata poi questo non verrà passato esplicitamente chiamato, ma lo farà Python implicitamente.
Le istanze di una classe hanno gli attributi, questi non sono altro che parti di dati associati ad essa. Gli attributi di una classe sono accessibili tramite un punto tra il nome dell’oggetto e il nome del suo attributo.
nomeoggetto.attributo
Il metodo __init__
Nel caso precedente abbiamo visto che nella definizione di una classe, abbiamo definito un metodo chiamato __init__(). Questo metodo è il più importante metodo all’interno di una classe. Questo metodo viene chiamato al momento della creazione di una classe, cioè quando il nome della classe viene chiamato come fosse una funzione (creazione dell’oggetto).
Il metodo __init__ , viene chiamato spesso come costruttore, accetta tutti gli altri metodi di una classe, l’argomento self, e poi tutti gli attributi della classe.
Metodi
Le classi possono avere altri metodi oltre il costruttore. Tutti comunque dovranno avere self come primo argomento. Anche i metodi come gli attributi vengono richiamati tramite il . di referenziamento.
nomeoggeto.metodo()
Vediamo un esempio:
class Auto:
def __init__(self, colore, prezzo):
self.colore = colore
self.prezzo = prezzo
def compra(self):
print("L'auto {0} è tua".format(self.colore))
bmw = Auto("blu",10000)
bmw.compra()
eseguiamo
>>>
L'auto blu è tua
Attributi di classe
Le classi possono anche avere degli attributi di classe, che sono delle variabili che vengono definiti al momento della creazione. Quindi il loro valore è già definito al momento dell’istanza dell’oggetto.
class Auto:
nazione = "Italia"def __init__(self, colore, prezzo):
self.colore = colore
self.prezzo = prezzo
def compra(self):
print("L'auto {0} è tua".format(self.colore))
bmw = Auto("blu",10000)
print(bmw.nazione)
eseguendo
>>>
Italia
Gli attributi di classe hanno senso quando il valore che contengono vale per tutti gli oggetti appartenenti a quella classe.
Se si cerca di accedere ad un attributo inesistente, si ottiene un’eccezione AttributeError.