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

Jose Caballero jcaballero.hep en gmail.com
Mie Oct 13 12:49:27 CEST 2010



> 
> 2010/10/13 Rolando Espinoza La Fuente <darkrho en gmail.com>
> 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
> 
> 



> ¿Puedes hacer que todas esas clases deriven de una sola? De esa forma podrías hacer que en la clase base se mantuviera un registro de todas las clases derivadas, usando un diccionario,p.e. que mapeara nombre de clase-> clase, o nombre de clase -> (modulo, clase), o algo similar


¿tendría que mantener a mano ese diccionario o hay forma de hacer que se cree automáticamente?
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20101013/b735fd5d/attachment.html>


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