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

Condividi sui Social