[Python-es] búsqueda automática de clases en un paquete

Rolando Espinoza La Fuente darkrho en gmail.com
Mie Oct 13 03:00:09 CEST 2010


2010/10/12 Jose Caballero <jcaballero.hep en gmail.com>:
[...]
> ----------------------------------------------------------------------------
> import modN
>
>         if hasattr(modN, name):
>                 return getattr(modN, name)()
> ----------------------------------------------------------------------------
>
> ¿No hay forma de hacerlo más automático?
> Lo ideal sería hacer un loop a los módulos que existan en el directorio
> my_libs, de forma que no sea necesario escribir a mano esas dos líneas, uno
> por módulo.

Puedes reusar el código de `walk_modules` de [1]. Y tener algo como:

all_modules = walk_modules("my_libs")

def getobject(name):
    for mod in all_modules:
        if hasattr(mod, name):
            return getattr(mod, name)

Otra alternativa sería utilizar os.listdir() sobre my_libs, cargar los .py
con __import__().

Saludos

[1] http://hg.scrapy.org/scrapy/file/a6275154f238/scrapy/utils/misc.py#l48

Rolando Espinoza La fuente
www.insophia.com


Más información sobre la lista de distribución Python-es