2011-10-20 23 views
7

que estoy construyendo un proyecto y se han topado con el siguiente problema:Python: El mantenimiento de código en los módulos

he implementado varias subclases, cada una de ellas que tienen alrededor de 250 líneas de código. Semánticamente, deben ir juntos en el mismo módulo y quiero importarlos con

from mymodule import SubclassA, SubclassB 

Pero entonces mi archivo de módulo tiene miles de líneas, lo que hace que el mantenimiento de su código bastante desagradable. Ahora tengo cada clase en un archivo separado para que sea más fácil de mantener, pero tengo que utilizar de esta manera:

from subclassa import SubclassA 
from subclassb import SubclassB 

esto no tiene ningún sentido y es realmente horrible.

¿Existe alguna solución elegante? Si no, ¿cuál de los anteriores es la mejor solución?

+1

Quizás necesite un paquete: http://docs.python.org/tutorial/modules.html (6.4) – danihp

+0

"miles de líneas, lo que hace que mantener su código sea bastante desagradable"? De Verdad? ¿Por qué? ¿puede ser más específico sobre cuál será su problema real? –

Respuesta

5

Siempre puede colocar las importaciones from subclassa ... en el paquete __init__.py como mostró en su segundo listado. Luego, estarán disponibles directamente en su paquete como escribió en su primera lista.

+0

¡Muchas gracias! Eso funciono. Finalmente creé un paquete con las importaciones en su archivo '__init __. Py'. –

1

Prefiero la segunda solución, con archivos separados. Las importaciones no son tan horribles.

Si te molestan demasiado, podrías encapsularlas en otro archivo y luego importar todas las clases de segunda mano desde ese archivo. Por lo tanto, su importación principal se vería como la primera solución, pero el único contenido del archivo mymodule sería el código de la segunda solución.

0

Puede importar ambas clases dentro mymodule módulo desde sus respectivos archivos:

import SubclassA, SubclassB 

y luego dentro de otros proyectos sólo tiene que importar estas clases de este módulo:

from mymodule import SubclassA, SubclassB 

Avísame si esto es lo que estás buscando.

Cuestiones relacionadas