
La funzione vars() di Python
La funzione vars() in Python restituisce gli attributi di un oggetto o le variabili utilizzate nel namespace corrente.
vars()
Tecnicamente la funzione vars() ritorna l'attributo `__dict__` di un oggetto, che è un dizionario contenente gli attributi (o variabili) e i loro corrispondenti valori dell'oggetto.
Se chiami vars() senza argomenti tra le parentesi, si comporta come locals() e restituisce un dizionario con le variabili locali del namespace corrente.
Perché è utile? La funzione vars() è particolarmente utile quando hai bisogno di esaminare o manipolare dinamicamente le proprietà degli oggetti. Per esempio, potresti voler iterare su tutti gli attributi di un oggetto e leggerne i valori o modificarli. Questo può essere molto utile nella programmazione dinamica.
Ecco un esempio pratico.
Immagina di avere una classe chiamata `Automobile`.
Questa classe ha alcuni attributi come `marca`, `modello` e `anno`.
class Automobile:
def __init__(self, marca, modello, anno):
self.marca = marca
self.modello = modello
self.anno = anno
Ora crea un'istanza della classe Automobile
mia_auto = Automobile("Fiat", "500", 2021)
Se vuoi esaminare gli attributi dell'istanza `mia_auto` puoi utilizzare vars().
print(vars(mia_auto))
Questo stampa qualcosa simile a:
{'marca': 'Fiat', 'modello': '500', 'anno': 2021}
Modificare dinamicamente gli attributi
La funzione vars() può anche essere utilizzata per modificare dinamicamente gli attributi di un oggetto.
Ad esempio, prendi l'oggetto `mia_auto`:
attributi_auto = vars(mia_auto)
Poi modifica l'anno
attributi_auto['anno'] = 2024
Se adesso interroghi l'attributo dell'oggetto, Python stampa il nuovo valore
print(mia_auto.anno)
2024
In conclusione, vars() è uno strumento potente per l'ispezione e la manipolazione degli oggetti in Python.
Ti apre una finestra sugli aspetti interni degli oggetti che, usata saggiamente, può aiutarti a scrivere codice più dinamico e flessibile.
È importante però notare che la funzione vars() funziona solo con oggetti che hanno un attributo `__dict__`, che sono la maggior parte degli oggetti definiti dall'utente.
Tuttavia, non tutti gli oggetti Python hanno un attributo `__dict__`.
Per esempio, se provi a digitare vars(42) sul terminale di Python, otterrai un errore perché un intero non ha attributi che puoi esaminare o modificare in questo modo.