[pyar] circular imports: they are everywhere.

Fabian Ezequiel Gallina galli.87 en gmail.com
Vie Sep 10 03:34:05 ART 2010


El día 10 de septiembre de 2010 03:13, Tordek <kedrot en gmail.com> escribió:
> On 10/09/10 00:43, Fabian Ezequiel Gallina wrote:
>>
>> 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()
>
>> Segunda solución: Lazy Imports, es decir que el módulo realmente se
>> importe a la hora de que se use.
>
> ¿No sería posible armar algo como...
>
> @lazy_import(otra.app.Algo)
> def funcion_loca()
>   [...]
>
> definiendo lazy_import como un decorator que, al llamar la función, importe
> el módulo, y reemplace la definición de la función por una idéntica, pero
> sin el import?
>
> Digo, no soy muy ducho con los decorators en Python (y, según todos los
> comentarios a este hilo no parece que valga la pena hacerlo), pero... ¿se
> puede?
>

Mejor todavía, podría solo hacer el import y ya :).

Al margen de eso me quedé con esta implementación de los muchachos de
mercurial[0] que según mi criterio tiene bastante más onda que la de
los muchachos de bazaar[1] para mi caso.

Con esa implementación sólo los módulos que se importan de la
siguiente forma son hechos lazy:

import a.b
import a.b.c as c

Lo cual me viene al pelo porque solo en algunos casos necesito que sea
lazy. De todas formas, probablemente termine hackeando un poco cómo
establece qué import es lazy y cual no para que se amolde un poco
mejor a la app dónde estoy laburando.

Qué masa sería que python venga con algo como esto de fábrica, vi que
hay unos peps[2][3]. Es un garrón que no haya pasado nada :(

Imagino un futuro con:

lazy_import blah
from sarasa lazy_import dada, blabla


Gracias a todos por las respuestas.


[0] http://selenic.com/repo/hg/file/5d22e631c365/mercurial/demandimport.py
[1] http://bazaar.launchpad.net/~bzr/bzr/trunk/annotate/head:/bzrlib/lazy_import.py
[2] http://permalink.gmane.org/gmane.comp.python.devel/90949
[3] http://www.python.org/dev/peps/pep-0369/


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



More information about the pyar mailing list