2011-10-20 12 views
7

sto costruendo un progetto e ho eseguito nel seguente problema:Python: Mantenere codice in moduli

ho implementato diverse sottoclassi, ognuna delle quali ha circa 250 linee di codice. Semanticamente, dovrebbero andare insieme nello stesso modulo e voglio importarli con

from mymodule import SubclassA, SubclassB 

Ma poi il mio file modulo dispone di migliaia di linee, che fa mantenendo il suo codice piuttosto brutta. Ora ho ogni classe in un file separato per rendere più facile da mantenere, ma devo usare in questo modo:

from subclassa import SubclassA 
from subclassb import SubclassB 

questo non ha alcun senso ed è davvero terribile.

Esiste una soluzione elegante? In caso negativo, quale di questi è la soluzione migliore?

+1

Forse avete bisogno di un pacchetto: http://docs.python.org/tutorial/modules.html (6.4) – danihp

+0

"migliaia di righe, che rende il codice molto maneggevole"? Veramente? Perché? puoi essere più specifico su quale sarà il tuo problema reale? –

risposta

5

È sempre possibile inserire le importazioni from subclassa ... nel pacchetto __init__.py come indicato nel secondo elenco. Quindi, saranno disponibili direttamente sul tuo pacchetto come hai scritto nel tuo primo annuncio.

+0

Grazie mille! Ha funzionato. Alla fine ho creato un pacchetto con le importazioni nel suo file '__init __. Py'. –

1

Preferisco la seconda soluzione, con file separati. Le importazioni non sono così orribili.

Se ti infastidiscono così tanto, potresti incapsularli in un altro file e quindi importare tutte le classi di seconda mano da quel file. Quindi la tua importazione principale sembrerebbe la prima soluzione, ma l'unico contenuto del file mymodule sarebbe il codice nella seconda soluzione.

0

È possibile importare entrambe le classi all'interno del modulo mymodule dai loro rispettivi file:

import SubclassA, SubclassB 

e poi all'interno di altri progetti si può semplicemente importare queste classi da questo modulo:

from mymodule import SubclassA, SubclassB 

fatemi sapere se Questo e ciò che stai cercando.