Separación de código Python en módulos con imports
Clase 9 de 17 • Curso de Python Orientado a Objetos
Resumen
Organizar un proyecto de Python en módulos convierte el caos en claridad. Separar responsabilidades, aplicar PEP 8 y usar imports bien escritos mejora el mantenimiento, la reutilización y la comprensión del código. Aquí verás cómo pasar de código espagueti a una estructura profesional con archivos como Libros.py, Biblioteca.py y main.py, además de clases como Estudiante, Profesor y Libro.
¿Por qué separar en módulos y evitar el código espagueti?
Cuando el código crece en un solo archivo, se vuelve insostenible y difícil de modificar. Dividir en módulos con responsabilidad única por archivo permite editar y localizar clases de forma directa.
¿Qué problemas resuelve la modularización?
- Evita tener todo "amontonado" en un main.py interminable.
- Reduce la deuda técnica al clarificar la arquitectura.
- Facilita encontrar y editar clases, por ejemplo en Libros.py.
- Acelera el mantenimiento y la lectura del proyecto.
¿Cómo se reduce deuda técnica y se mejora la arquitectura?
- Separando definiciones de clases de la ejecución en main.py.
- Creando archivos dedicados: Libros.py y Biblioteca.py para sus clases.
- Eliminando código que “se ejecuta dentro del módulo” y moviéndolo a main.py.
- Manteniendo cada archivo con una sola responsabilidad clara.
¿Cómo reorganizar archivos y clases con imports en Python?
Después de mover las clases a sus módulos, verás que el editor marca nombres no definidos: es momento de usar imports. Importar solo lo necesario conecta los módulos sin romper el encapsulamiento.
¿Qué archivos crear y qué responsabilidad tiene cada uno?
- Libros.py: define Libro y el libro físico. Responsable de clases de libros.
- Biblioteca.py: define la clase Biblioteca. Responsable de operaciones de la biblioteca.
- Usuarios.py: define Estudiante, Profesor y el solicitante protocol. Responsable de usuarios y protocolos.
- main.py: punto de entrada. Responsable de la interconexión y de ejecutar el flujo.
¿Cómo escribir imports correctos y útiles?
- Importa clases desde su módulo de origen.
- Agrupa múltiples clases del mismo módulo en una línea.
- Mantén los imports al inicio del archivo.
# main.py
from Usuarios import Estudiante, Profesor # y el solicitante protocol
from Libros import Libro, LibroFisico
from Biblioteca import Biblioteca
# creación e interconexión
town_library = Biblioteca()
est1 = Estudiante("Ana")
prof1 = Profesor("Luis")
lib1 = Libro("Python 101")
lib2 = LibroFisico("Estructuras de Datos")
# ejemplo de uso
print(town_library.libros)
- Es válido repetir imports en varios archivos si se usan en cada uno.
- Una buena práctica: nombrar los archivos en plural cuando contienen varias clases.
¿Qué buenas prácticas aplicar con pep 8, nombres y herramientas?
El sistema de imports de Python es un pilar de la modularización. Ordenarlo bien y automatizarlo con herramientas acelera el flujo y evita errores.
¿Cómo ordenar imports y nombres de módulos?
- Sigue PEP 8: tres grupos con un salto de línea entre ellos.
- Biblioteca estándar de Python.
- Librerías de terceros.
- Módulos de tu aplicación.
- Dentro de cada grupo, orden alfabético.
- Usa nombres de archivos claros y, cuando apliquen varias clases, en plural.
# ejemplo de orden pep 8
import os
import sys
import requests
from Usuarios import Estudiante, Profesor
from Libros import Libro, LibroFisico
from Biblioteca import Biblioteca
- Herramientas: Ruff en Visual Studio Code puede organizar imports automáticamente al guardar.
- Beneficio adicional: archivos más cortos reducen el contexto al usar LLMs para generar código; por ejemplo, pasar 8 líneas en vez de 10 o 20 ayuda a ahorrar costos.
¿Cómo validar el refactor y ejecutar el main?
- Centraliza la creación de objetos y la lógica orquestadora en main.py.
- Limpia líneas de prueba que ya no apliquen, por ejemplo si usas el libro físico.
- Ejecuta el archivo de entrada.
python main.py
- Verifica que imprime lo esperado, por ejemplo Biblioteca.libros.
¿Te funcionó esta estructura modular en tus proyectos de Python? Comparte tu experiencia y dudas en los comentarios.