Modulos, importar desde variables.

Ariel Nardelli pan_python en yahoo.com.ar
Lun Sep 19 20:17:57 CEST 2005


Hola Chema..
Antes que nada, como siempre, MIL GRACIAS POR LAS
AYUDAS!!!!!!!!!!!!!!!!!!!!!, realmente se nota que sos un buen tipo
dispuesto a ayudar...

Bueno, a lo nuestro :)

Estube haciendo pruebas con lo que me mandaste y ademas de achicarme el
codigo, algo asi me aydaria para poder hacer otras cosas como tener en
una db las opciones que el usuario puede entrar y asi tener un nivel de
seguridad por usuario, cosa que me interesa hacer...

Pero antes de hacer esa parte tengo que hacer andar lo que me mandaste,
todavia no termino de entenderlo bien pero  intento probarlo y no me
funciona...

Puse tal cual esta en tu ejemplo (solo que agregue una , en uno de las
definiciones de codigos (deje el ultimo sin coma) y hice los demas pasos
pero al ejectuarlo zap, no me anda....
Me larga esto...

TypeError: genericProc() takes exactly 2 arguments (1 given)

Evidentemente, paso un solo argumento y se necesitan pasar dos, pero no
se que pasarle...
Aca te pongo lo que hice...

        # -40- Clientes.
        codigos=(
            40100000, # Abm clientes.
            40201500, # Resumen p/Cliente
            40202000,  # Resumen General
            40203000  # Cierre de mes
        )

        for codigo in codigos:
            EVT_MENU(self, codigo, self.mkProc(codigo))

    # Clientes -40-
    def mkProc(self, codigo):
        def genericProc(self, event):
            pr=geattr(__import__('f'+str(codigo)),'p'+str(codigo))
            win = pr(self.pmios, self, -1, "")
            win.CenterOnParent()
            win.Show(true)
        return genericProc

Donde podria estar el error?

Gracias de nuevo, Ariel...

Chema Cortes wrote:

>El Jueves 15 Septiembre 2005 20:58, Ariel Nardelli escribió:
>  
>
>>Hola.
>>Tengo las opciones del menu de mi programa que cada opcion del menu
>>llama a una funcion donde dentro importo el modulo del programa a usar y
>>lo ejecuto.
>>Estas funciones son siempre las mismas y mi idea es juntar y usar una
>>sola, pero para eso tendria que importar los modulos desde una variable...
>>[...]
>>Esto yo lo puedo construir tranquilamente porque seria la opcion del
>>menu + una f o p delante y asi simplificaria kilometros de codigo...
>>Como puedo hacer entonces para importar desde variables? lo intente y me
>>manda a freir papas :)
>>    
>>
>
>modulo=__import__("Módulo")
>
>En realidad necesitas combinar ésto con getattr()
>
>Por ejemplo,
>
>  from f40100000 import p40100000
>
>sería
>
>  nom="40100000"
>  proc=getattr(__import__('f'+nom),'p'+nom)
>
>Refactorizando un poco:
>
>codigos=(
>    40100000, # Abm clientes.
>    40201500, # Resumen p/Cliente
>    40202000  # Resumen General
>    40203000  # Cierre de mes
>)
>
>    # -40- Clientes.
>    for codigo in codigos:
>        EVT_MENU(self, codigo, self.mkProc(codigo))
>
>    def mkProc(self, codigo):
>        def genericProc(self, event):
>            pr=geattr(__import__('f'+str(codigo)),'p'+str(codigo))
>            win = pr(self.pmios, self, -1, "")
>            win.CenterOnParent()
>            win.Show(true)
>        return genericProc
>
>
>Un bonito ejemplo de "clausura" (clousure).
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>  
>


-- 
Saludos
Panflin

www.reconquista.com.ar




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