[pyar] Uso eval() para clase definida en otro archivo

Marcos Dione mdione en grulic.org.ar
Sab Mar 4 12:05:00 ART 2017


On Sat, Mar 04, 2017 at 10:32:42AM -0300, Juan Pablo Hernández Vogt wrote:
> 2) Conozco que datos van a pasar?
> Si, son definiciones de VARIABLE=valor en archivos de texto. A veces
> generados por el programa para inspección y también como forma de almacenar
> configuraciones de esas variables para que puedan ser utilizadas por el
> usuario distintas aplicaciones.

    si es solamente VARIABLE=valor, está ConfigParser. claro que la
instanciación de clases particualres lo vas a tener que hacer a mano,
pero en el largo plazo va a ser mejor.

> c) Mi intención primaria era que la lógica de load() en el módulo base
> pueda encargarse de convertir el string CalculationMode.Pass_3D en el
> objeto enumeración correspondiente. Cómo dicho módulo es el corazón, no
> tiene idea de qué define el otro módulo (o incluso otros módulos que se
> agreguen en el futuro), fue ahí donde el uso del parametro self.globals,
> seteado desde el módulo específico, hizo posible que la clase base
> interprete correctamente el string de enumeración.

    pero eso funciona sólo si antes hiciste el import del módulo (mas
bien, plugin) en cuestión. yo para eso usaría la importlib y, como dije,
instanciación 'a mano', pero no es mucho laburo.

> 3) Haciendo desaparecer eval()
> Estuve consultando con la almohada y creo saber cómo hacerlo de una manera
> mas o menos elegante, pero utilizando *ast *en el caso por default más un
> checkeo del string para saber qué objeto devolver (es decir, mi propio
> parser del módulo específico).

    hmm, si tuveiras una forma de saber en qué módulo (again, mas bien
plugin) está la clase X entonces sería mas fácil. por ejemplo, llamando
el módulo 'x' y hcer con importlib el equivalente a 'from x import X'.

-- 
(Not so) Random fortune:
Terrorism isn't a crime against people or property. It's a crime against
our minds, using the death of innocents and destruction of property to
make us fearful.
	    -- Bruce Schneier


Más información sobre la lista de distribución pyar