CodeGym /Corsi /Python SELF IT /Inizializzazione dell'oggetto

Inizializzazione dell'oggetto

Python SELF IT
Livello 15 , Lezione 4
Disponibile

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 nome barsik.
  • poi all'oggetto barsik vengono assegnati due attributi: name e age 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, utilizzando self.
  • 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
               
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION