Tabella dei contenuti: Mostra/Chiudi
In Python, __init__, è un metodo speciale, e viene chiamato automaticamente appena andiamo a creare un oggetto e ci permette di inizializzare gli attributi della classe.
Sintassi
Prendiamo ad esempio la classe Automobile:
class Automobile:
def __init__(self):
print("Inizializzazione classe")
prima_macchina = Automobile()
Output:
Inizializzazione classe
Il parametro self rappresenta l'istanza dell'oggetto a cui si fa riferimento, ed è necessario inserirlo come primo parametro di ogni metodo definito all'interno di una classe.
Per convenzione viene utilizzato il nome self come parametro per indicare l'istanza dell'oggetto, ma è possibile assegnargli qualsiasi nome.
Il motivo per cui self deve essere sempre come primo parametro è proprio perchè python assegna al primo parametro di ogni metodo di una classe l'istanza dell'oggetto.
Inizializzare gli attributi con __init__()
Come detto in precedenza, nell'__init__(), vengono inizializzati gli attributi di una classe.
Per definire e valorizzare un attributo, la sintassi è la seguente: istanza_oggetto.nome_attributo = valore
.
Dato che abbiamo detto che per convenzione utilizziamo self come istanza dell'oggetto, se dovessimo creare e valorizzare un attributo(marca, ad esempio) all'interno della classe Automobile, dovremmo scrivere la seguente istruzione: self.marca = "Fiat"
.
Andiamo quindi ad aggiungere al nostro metodo Init() i parametri marca
, colore
e modello
e inizializziamo i rispettivi attributi:
class Automobile:
def __init__(self, marca, colore, modello):
print("Inizializzazione attributi")
self.marca = marca
self.colore = colore
self.modello = modello
prima_macchina = Automobile("Fiat", "Bianca", "500L")
print(prima_macchina.marca)
print(prima_macchina.colore)
print(prima_macchina.modello)
#output
Inizializzazione attributi
Fiat
Bianca
500l
Usare __init__ in una classe ereditata
Nell'esempio seguente verrà eseguito solamente il costruttore della classe Automobile
, e non quello della classe padre MezzoDiTrasporto
:
class MezzoDiTrasporto:
def __init__(self):
print("Inizializzando classe Padre")
class Automobile(MezzoDiTrasporto):
def __init__(self, marca, colore, modello):
print("Inizializzando classe figlia")
prima_macchina = Automobile("Lancia", "Grigio", "Ypsilon")
#output
Inizializzando classe figlia
Per permettere l'esecuzione dell'__init__ della classe da cui Automobile eredita, dovremmo chiamare direttamente il metodo init di MezzoDiTrasporto
all'interno del costruttore di Automobile
in questo modo:
class MezzoDiTrasporto:
def __init__(self):
print("Inizializzando classe Padre")
class Automobile(MezzoDiTrasporto):
def __init__(self, marca, colore, modello):
MezzoDiTrasporto.__init__(self)
print("Inizializzando classe figlia")
prima_macchina = Automobile("Lancia", "Grigio", "Ypsilon")
#output
Inizializzando classe Padre
Inizializzando classe figlia