4.1 Inizializzazione
Solitamente, subito dopo la creazione, gli oggetti non sono ancora pronti all'uso. Prima bisogna passare loro tutti i dati necessari: parametri di funzionamento, valori iniziali, riferimenti ad altri oggetti, ecc.
Questo processo è chiamato inizializzazione e dovrebbe avvenire immediatamente dopo la creazione dell'oggetto.
Supponiamo che tu abbia una classe Gatto (Cat)
, e vuoi assegnargli un nome e un'età, puoi farlo in diversi modi:
Inizializzazione degli attributi dopo la creazione dell'oggetto
In questo esempio prima si crea:
- un oggetto vuoto
Cat
. - un'istanza della classe
Cat
con il nomebarsik
. - poi all'oggetto barsik vengono assegnati due attributi:
name
eage
aggiunti direttamente all'oggetto.
class Cat:
pass
# Creazione dell'oggetto Cat
barsik = Cat()
# Inizializzazione degli attributi dopo la creazione dell'oggetto
barsik.name = "Barsik"
barsik.age = 5
print(f"Nome del gatto: {barsik.name}, età: {barsik.age}") # Output: Nome del gatto: Barsik, età: 5
Utilizzo di un metodo per l'inizializzazione degli attributi
In questo esempio per l'inizializzazione degli attributi si utilizza un metodo initialize
. L'oggetto Cat
viene creato senza alcun attributo, poi si usa il metodo initialize()
per assegnare i valori agli attributi.
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# Creazione dell'oggetto Cat
barsik = Cat()
# Inizializzazione degli attributi tramite metodo
barsik.initialize("Barsik", 5)
print(f"Nome del gatto: {barsik.name}, età: {barsik.age}") # Output: Nome del gatto: Barsik, età: 5
Uso dei campi della classe
In questo esempio gli attributi name
e age
sono definiti a livello di classe. Dopo la creazione dell'oggetto barsik
, gli attributi vengono inizializzati direttamente.
class Cat:
name = ""
age = 0
# Creazione dell'oggetto Cat
barsik = Cat()
# Inizializzazione degli attributi dell'oggetto
barsik.name = "Barsik"
barsik.age = 5
print(f"Nome del gatto: {barsik.name}, età: {barsik.age}") # Output: Nome del gatto: Barsik, età: 5
Qual è il modo migliore? Nessuno! Il meglio è usare un costruttore :)
4.2 Costruttore
Il costruttore è un metodo speciale che viene automaticamente chiamato
quando viene creato un nuovo oggetto della classe. Il costruttore è usato per inizializzare i campi dell'oggetto e può eseguire qualsiasi azione iniziale, necessaria per configurare l'oggetto.
In Python il costruttore è il metodo chiamato __init__
. Ecco i principali aspetti su di esso:
- Il metodo
__init__
è il costruttore in Python. Viene chiamato automaticamente, quando viene creato un nuovo istanza della classe. -
__init__
accetta almeno un parametro —self
, che fa riferimento all'oggetto creato. Inoltre possono essere passati altri parametri per inizializzare gli attributi dell'oggetto. - All'interno del metodo
__init__
è possibile impostare i valori iniziali degli attributi dell'oggetto, utilizzandoself
. - Il costruttore può effettuare qualsiasi azione necessaria per la configurazione dell'oggetto, come la verifica dei dati di input o l'impostazione di collegamenti con altri oggetti.
I parametri vengono passati al costruttore automaticamente, devi solo specificarli tra parentesi tonde durante la creazione dell'oggetto.
Ecco come apparirà l'inizializzazione del nostro gatto utilizzando il costruttore:
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# Creazione dell'oggetto Cat con nome ed età
barsik = Cat("Barsik", 5)
print(f"Nome del gatto: {barsik.name}, età: {barsik.age}") # Output: Nome del gatto: Barsik, età: 5
Dopo la creazione di un oggetto tipo Cat
verrà automaticamente chiamato il metodo __init__
, e verranno passati tre parametri:
- Riferimento all'oggetto barsik nel parametro
self
- La stringa "Barsik" nel parametro
name
- Il numero 5 nel parametro
age
È comodo e bello.
Validazione dei dati
Inoltre nel costruttore si può effettuare la validazione dei dati. Infatti lo scopo del costruttore è formare un oggetto valido (corretto), con il quale si può continuare a lavorare. Esempio:
class Cat:
def __init__(self, name, age):
if age < 0: raise ValueError("L'età non può essere negativa")
self.name = name
self.age = age
# Creazione dell'oggetto Cat con controllo dell'età
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # Output: L'età non può essere negativa
GO TO FULL VERSION