Lezioni di Python – 7.1 Classi

Lezioni di Python - 7.1 Classi

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.

⇐Vai a Lezione 6.8 – il modulo itertools

Vai a Lezione 7.2 – Inheritance ⇒

Lascia un commento