
La funzione getattr() in Python
La funzione getattr() in Python è utilizzata per accedere al valore di un attributo di un oggetto dinamicamente.
getattr(object, name[, default])
I parametri della funzione sono i seguenti:
- object: l'oggetto dal quale vuoi recuperare l'attributo.
- name: il nome dell'attributo che vuoi ottenere.
- default (opzionale): il valore che viene restituito se l'attributo specificato non esiste. Se non specifichi questo parametro, quando l'attributo non esiste getattr() solleva un'eccezione "AttributeError".
Questa funzione recupera il valore assegnato all'attributo dell'oggetto che hai indicato.
Questo può essere particolarmente utile quando hai un oggetto di una classe e vuoi accedere a uno di questi attributi. Ti dà anche la possibilità di gestire anche la situazione in cui un attributo non esiste, fornendo un valore di default.
Ecco un esempio pratico.
Crea una classe "Persona" composta da due attributi "nome" e "età".
class Persona:
def __init__(self, nome, eta):
self.nome = nome
self.eta = eta
Poi istanzia un oggetto "persona" dalla classe.
persona = Persona("Mario", 30)
All'oggetto viene assegnata la stringa "Mario" all'attributo "nome" e il valore intero 30 all'attributo "eta"
A questo punto puoi usare la funzione getattr() per accedere ai valori degli attributi.
Se accedi all'attributo "nome", la funzione getattr() legge e restituisce la stringa "Mario"
nome_persona = getattr(persona, "nome")
print(nome_persona)
Mario
Se invece accedi all'attributo "eta", viene restituito il valore 30
eta_persona = getattr(persona, "eta")
print(eta_persona)
30
Ricorda che se l'attributo non esiste nell'oggetto, Python solleva un'eccezione "AttributeError"
Ad esempio, se cerchi il campo "hobby" (che non esiste) viene restituito questo messaggio di errore
hobby_persona = getattr(persona, "hobby")
Traceback (most recent call last):
File "/home/main.py", line 14, in <module>
hobby_persona = getattr(persona, "hobby")
AttributeError: 'Persona' object has no attribute 'hobby'
Per evitare di vedere questo messaggio, puoi impostare un valore di default nella funzione getattr().
Accesso ad un attributo inesistente con default
Prova ad accedere a un attributo (hobby) che non esiste nell'oggetto, indicando anche un valore di default ("Non specificato").
hobby_persona = getattr(persona, "hobby", "Non specificato")
print(hobby_persona)
La funzione getattr() non trova l'attributo ma non solleva più un'eccezione.
In questo caso restituisce il valore di default.
"Non specificato"
Questo ti permette di gestire in modo elegante i casi in cui un attributo potrebbe non essere presente, evitando errori nel programma.