Inspeccionando objetos en Python: cómo ver sus atributos, métodos y valores de forma sencilla
Cuando trabajamos con Python en proyectos del día a día —scripts, automatizaciones, pequeñas herramientas o incluso APIs— muchas veces necesitamos ver por dentro un objeto: saber qué atributos tiene, qué valores guarda, qué métodos ofrece o si estamos recibiendo lo que esperamos.
Python, por suerte, trae de serie varias funciones que nos permiten “curiosear” o inspeccionar objetos sin esfuerzo. En este artículo te muestro las más útiles y cómo usarlas con ejemplos prácticos.
¿Por qué inspeccionar un objeto?
Algunas situaciones típicas:
- Estás debugueando y quieres saber qué valores tiene realmente un objeto.
- Estás desarrollando una librería o servicio y necesitas ver qué recibe una función.
- Estás trabajando con ORMs, APIs externas o clases complejas, y necesitas entender qué exponen.
- Simplemente no recuerdas cómo funciona un objeto y quieres una visión rápida.
Python te da herramientas muy potentes para esto, y casi todas vienen incluidas sin instalar nada.
Funciones propias de Python para inspeccionar objetos
1. dir(obj): todo lo que el objeto contiene
dir() devuelve todos los nombres de atributos, métodos y propiedades del objeto.
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def saludar(self):
return f"Hola, me llamo {self.nombre}"
p = Persona("Sergio", 35)
print(dir(p))
Salida (resumida):
['__class__', '__dict__', '__init__', 'edad', 'nombre', 'saludar', ...]
Es ideal para tener un “mapa general” del objeto.
2. vars(obj) o obj.__dict__: atributos de instancia y valores
Si lo que quieres es ver los atributos reales del objeto y sus valores, usa vars():
print(vars(p))
Salida:
{'nombre': 'Sergio', 'edad': 35}
Esto es lo que de verdad te interesa cuando debugueas.
📝 Nota: algunos objetos no usan
__dict__(por ejemplo, los que emplean__slots__), pero en la mayoría de clases personalizadas funciona de maravilla.
3. getattr() y hasattr(): accediendo dinámicamente
hasattr(obj, "campo") te dice si existe un atributo.
getattr(obj, "campo") te devuelve su valor.
if hasattr(p, "nombre"):
print("Nombre:", getattr(p, "nombre"))
apellido = getattr(p, "apellido", "Sin definir")
print("Apellido:", apellido)
Muy útil cuando quieres manipular objetos dinámicamente sin saber de antemano qué atributos tienen.
4. type(obj) e id(obj): información base
type(obj)→ te dice de qué clase es.id(obj)→ te da su identificador interno en memoria.
print(type(p)) # <class '__main__.Persona'>
print(id(p)) # número único del objeto
Pequeñas utilidades que ayudan cuando estás analizando un comportamiento extraño.
5. help(obj): documentación integrada
Si quieres información detallada del objeto, incluyendo métodos, docstrings, clases base… help() te lo da todo.
help(obj)
Perfecto para usar en la consola interactiva o cuando exploras código de terceros.
Inspección avanzada: el módulo inspect
Cuando necesitas algo más potente, Python trae el módulo inspect, ideal para:
- Ver el código fuente de una clase o función
- Obtener todos los miembros (métodos, atributos, propiedades…)
- Saber en qué módulo está definido algo
- Analizar firmas de funciones, parámetros, etc.
Ejemplo:
import inspect
# Listar miembros del objeto
print(inspect.getmembers(obj))
# Ver código fuente de la clase
print(inspect.getsource(Class))
Este módulo es una maravilla cuando quieres entender en profundidad cómo funciona algo que no has escrito tú.
Ejemplo práctico: función genérica para inspeccionar objetos
Aquí te dejo una función que puedes reutilizar en tus scripts. Muestra tanto atributos de instancia como miembros públicos:
import inspect
def inspeccionar(obj):
print(f"Inspeccionando objeto de tipo: {type(obj)}\n")
print("Atributos de instancia (vars):")
for nombre, valor in vars(obj).items():
print(f" {nombre} = {valor}")
print("\nMiembros públicos (inspect.getmembers):")
for nombre, miembro in inspect.getmembers(obj):
if not nombre.startswith("__"):
print(f" {nombre} → {miembro!r}")
# Uso:
inspeccionar(obj)
Es ideal para depurar clases complejas, especialmente si estás trabajando con frameworks como Django, SQLAlchemy, FastAPI o librerías externas.
Python tiene muchísimas facilidades para inspeccionar objetos sin necesidad de usar herramientas externas.
Las funciones built-in como dir(), vars(), getattr() y help() cubren casi todas las necesidades del día a día.
Y si necesitas algo más detallado, inspect te abre la puerta a introspección avanzada.
Con estas herramientas puedes entender objetos desconocidos, depurar más rápido y hacer tu código más dinámico.


