lettura facile

La funzione dir() di Python

Nel linguaggio Python la funzione dir() ti permette di ottenere l'elenco di tutti gli attributi (proprietà) e metodi di un oggetto.

dir(oggetto)

Si tratta di una funzione built-in, quindi è integrata nel linguaggio Python ed è sempre disponibile.

  • Se chiami la funzione dir() senza passare nessun argomento, restituisce l'elenco di nomi nello scope locale corrente.
  • Se invece chiami la funzione dir() con un oggetto come argomento, restituisce l'elenco di attributi e metodi di quell'oggetto.

A cosa serve? È utile per comprendere meglio la struttura degli oggetti in Python. Ad esempio, puoi usare la funzione dir() quando non ricordi se un oggetto può chiamare un determinato metodo o ha un particolare attributo.

Ecco un esempio pratico.

Crea una stringa

>>> var = 'Hello world!'

Utilizza la funzione dir indicando l'oggetto "var" come argomento

>>> dir(var)

La funzione dir() visualizza tutte le proprietà e i metodi delle stringhe.

In pratica, la funzione dir() si comporta come se fosse l'indice analitico della documentazione sulle stringhe.

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Puoi usare la funzione dir() per visualizzare i metodi e le proprietà di qualsiasi oggetto, non necessariamente built-in.

Ad esempio, crea la classe Persona

  1. class Persona:
  2. def __init__(self, nome, eta):
  3. self.nome = nome
  4. self.eta = eta
  5. def saluta(self):
  6. print(f"Ciao, mi chiamo {self.nome}")

La classe ha due attributi (nome, eta) e un metodo (saluta).

Ora definisci un oggetto "p" istanza della classe Persona.

p = Persona("Mario", 30)

Poi, chiama la funzione dir() passando l'oggetto "p" come argomento.

print(dir(p))

La funzione dir() produce un output simile al seguente:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'eta', 'nome', 'saluta']

Come puoi vedere, l'output include sia gli attributi e i metodi che hai definito nella classe (nome, età e saluta), sia un certo numero di metodi speciali incorporati che iniziano e terminano con doppio underscore __.

Nota. I metodi speciali sono usati in Python per implementare comportamenti personalizzati per gli oggetti, come l'overloading degli operatori.

Infine, se digiti dir() senza alcun argomento.

dir()

La funzione dir() restituisce il contenuto dello scope locale.

Tra i quali c'è anche la classe Persona che hai definito poco prima.

['Persona', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'p']

In programmazione, "scope" si riferisce al contesto in cui i nomi di variabili, funzioni e oggetti sono presenti in un blocco di codice.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin