IOKELU
Nivel: Avanzado – Guía 12
💡 Prueba el código:
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

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()

Siguiente guía

Tipado estático avanzado →