[pyar] circular imports: they are everywhere.

Fabian Ezequiel Gallina galli.87 en gmail.com
Vie Sep 10 00:43:52 ART 2010


Hola lista,

Les cuento que ando laburando en un proyecto en donde me encuentro con
cosas de este estilo:

def funcion_loca():
    from otra.app import Algo
    return Algo()

Lo primero que a uno se le viene a la cabeza es que eso no es pep8
compliant ni porque a Guido se lo amenace con hacerle escribir XML a
mano de por vida.

Lo segundo que uno hace es mover ese import al principio del archivo:

from otra.app import Algo

def funcion_loca():
    return Algo()

Lo tercero que sucede es: cannot import name Algo

La razón: imports circulares.

Primer solución: Refactorizar todo el codebase para que no sea tan
horrible y mal enfocado.
El problema: Mucho tiempo y no me van a dar el visto bueno.

Segunda solución: Lazy Imports, es decir que el módulo realmente se
importe a la hora de que se use.
El problema: las implementaciones que encontré de bzr y mercurial se
ven muy específicas a su problema y no me termino de decidir cuál
toquetear.


Entonces, qué estoy buscando con este mail?
Una manera que me recomienden para hacer lazy imports y embellecer un
poco más este codebase algo baqueteado (y dejar de importar cosas cada
vez que se llama a una función maldita).



Gracias de antemano,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com



More information about the pyar mailing list