dir(objeto)
La función dir devuelve el conjunto de nombres asociados al objeto incluido como argumento. Si no se incluye ningún argumento, devuelve el el conjunto de nombres del ámbito local.
- objeto: objeto del que obtener los nombres asociados.
El resultado de la función dir es una lista de etiquetas de texto.
Importemos una librería:
import time
Si ejecutamos ahora la función dir, obtenemos el conjunto de nombres asociados a ella:
dir(time)
['_STRUCT_TM_ITEMS',
'__doc__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'altzone',
'asctime',
'ctime',
'daylight',
'get_clock_info',
'gmtime',
'localtime',
'mktime',
'monotonic',
'monotonic_ns',
'perf_counter',
'perf_counter_ns',
'process_time',
'process_time_ns',
'sleep',
'strftime',
'strptime',
'struct_time',
'thread_time',
'thread_time_ns',
'time',
'time_ns',
'timezone',
'tzname']
Esta lista incluye las clases, funciones, atributos, etc. contenidos en la librería. Si utilizamos la función print el resultado de la función se muestra de forma más compacta:
print(dir(time))
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
Si pasamos a la función, por ejemplo, el nombre de una variable de cierto tipo, obtenemos los nombres asociados:
a = list([2, 4, 6])
print(dir(a))
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Vemos los métodos asociados a las listas que usamos habitualmente: count, index, insert, remove, etc.
Creemos una clase para ver el resultado de pasar a la función dir un objeto de la clase:
class Circulo:
pi = 3.141592
def __init__(self, radio):
self.radio = radio
self.__color = "red"
def area(self):
return Circulo.pi * (self.radio ** 2)
Hemos incluido un atributo de clase ("pi"), un atributo ("radio"), un atributo privado ("__color") y un método ("area"). Instanciemos ahora la clase en la variable c:
c = Circulo(3)
Y ejecutemos la función dir pasando como argumento la variable:
print(dir(c))
['_Circulo__color', '__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__', 'area', 'pi', 'radio']
Vemos que el atributo "__color" aparece con un nuevo nombre ("_Circulo__color") para evitar problemas con el mismo atributo de las posibles subclases que se creen (proceso denominado name mangling), y se muestran los atributos "pi" y "radio", y el método "area".