Ejecuta cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →
Reflexión e introspección en Python
La introspección permite examinar objetos en tiempo de ejecución. La reflexión permite modificarlos dinámicamente. Python es uno de los lenguajes más potentes en este ámbito gracias a funciones como getattr, setattr, hasattr, dir, inspect y manipulación del namespace.
Tabla de contenidos
- Introspección básica
- getattr, setattr, hasattr
- dir y vars
- Módulo inspect
- Modificación dinámica de objetos
- Manipulación del namespace
- Ejercicios
- Mini‑proyecto
1. Introspección básica
x = 42
print(type(x))
print(dir(x))
print(isinstance(x, int))
2. getattr, setattr, hasattr
class Persona:
nombre = "Ana"
p = Persona()
print(getattr(p, "nombre"))
setattr(p, "edad", 30)
print(hasattr(p, "edad"))
3. dir y vars
class Demo:
def __init__(self):
self.x = 10
self.y = 20
d = Demo()
print(dir(d))
print(vars(d))
4. Módulo inspect
import inspect
def sumar(a, b):
return a + b
print(inspect.getsource(sumar))
print(inspect.signature(sumar))
5. Modificación dinámica de objetos
class Demo:
pass
d = Demo()
def hablar(self):
return "Hola!"
setattr(Demo, "hablar", hablar)
print(d.hablar())
6. Manipulación del namespace
globals()["variable"] = 123
print(variable)
locals()["x"] = 10 # no siempre funciona igual
print(x)
7. Ejercicios
- Usa getattr para ejecutar métodos dinámicamente.
- Usa setattr para añadir atributos según condiciones.
- Usa inspect para obtener parámetros de una función.
- Modifica una clase en tiempo de ejecución.
- Crea un sistema de plugins con reflexión.
# getattr dinámico
getattr(obj, nombre_metodo)()
# inspect signature
inspect.signature(func)
8. Mini‑proyecto: Sistema de plugins dinámicos
class PluginBase:
def ejecutar(self): raise NotImplementedError
def cargar_plugin(nombre):
modulo = __import__(nombre)
clase = getattr(modulo, "Plugin")
return clase()
# archivo plugin1.py
# class Plugin(PluginBase):
# def ejecutar(self): print("Plugin 1 ejecutado")
p = cargar_plugin("plugin1")
p.ejecutar()