Translate

sábado, 7 de noviembre de 2020

Introspección de objetos en Python


En programación, la introspección es la capacidad de determinar las características de un objeto en tiempo de ejecución. Es uno de los puntos fuertes de Python. Todo en Python es un objeto y podemos examinar esos objetos. Python viene con algunas funciones y módulos incorporados para ayudarnos.

dir es una de las funciones más importantes para la introspección. Devuelve una lista de atributos y métodos que pertenecen a un objeto. Aquí hay un ejemplo:

my_list = [1, 2, 3]

dir(my_list)

# Output: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',

# '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',

# '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__',

# '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',

# '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',

# '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__',

# '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop',

# 'remove', 'reverse', 'sort']

Esta llamada nos dio los nombres de todos los métodos de una lista. Esto puede ser útil cuando no puede recordar el nombre de un método. Si ejecutamos dir () sin ningún argumento, devuelve todos los nombres en el ámbito actual.

La función de type devuelve el tipo de un objeto. Por ejemplo:

print(type(''))

# Output: <type 'str'>

print(type([]))

# Output: <type 'list'>

print(type({}))

# Output: <type 'dict'>

print(type(dict))

# Output: <type 'type'>

print(type(3))

# Output: <type 'int'>

id devuelve los identificadores únicos de varios objetos. Por ejemplo:

name = "Yasoob"

print(id(name))

# Output: 139972439030304

El módulo de inspección también proporciona varias funciones útiles para obtener información sobre objetos activos. Por ejemplo, puede verificar los miembros de un objeto ejecutando:

import inspect
print(inspect.getmembers(str))
# Output: [('__add__', <slot wrapper '__add__' of ... ...

También hay un par de otros métodos que ayudan en la introspección. Pero los veremos en otro post...