[pyar] Uso eval() para clase definida en otro archivo
Juan Pablo Hernández Vogt
jphv.mail en gmail.com
Vie Mar 3 10:26:26 ART 2017
Buenos días gente,
Como todo nuevo en Python tengo un problema al usar eval() que no entiendo.
Parece que hay algo relacionado al evironment en el que es ejecutado.
Aquí un ejemplo mínimo que arroja el siguiente error:
*NameError: name 'CalculationMode' is not defined*
Si muevo la definicion de la clase *CalculationMode *a *base.py*, eval()
funcionará correctamente:
{'passes': [-1, 0, -1, 0], 'DUMMY': True, 'GENERIC_NAME': 'dummy',
'AMBIENT_TEMPERATURE': 293, 'PRESSURE': 1013.25, 'MODE':
<CalculationMode.Pass_3D: 1>}
*File: base.py*
class BaseObject(object):
def __init__(self, parameters=None):
self.parameters = parameters
def load_parameter(self, key, value):
if self.parameters is None:
self.parameters = {}
self.parameters[key] = eval(value)
*File: derived.py*
from base import *
# Using aenum from: https://pypi.python.org/pypi/aenum/1.4.5
from aenum import Enum
class CalculationMode(Enum):
Pass_2D = 0
Pass_3D = 1
class Derived(BaseObject):
def __init__(self, parameters=None):
super(Derived, self).__init__(parameters)
if __name__ == "__main__":
obj = Derived()
obj.load_parameter('GENERIC_NAME', '"dummy"')
obj.load_parameter('AMBIENT_TEMPERATURE', '293')
obj.load_parameter('PRESSURE', '1013.25')
obj.load_parameter('DUMMY', 'True')
obj.load_parameter('passes', '[-1, 0, -1, 0]')
print(obj.parameters)
print("load enumeration")
obj.load_parameter('MODE', 'CalculationMode.Pass_3D')
print(obj.parameters)
Entonces, cómo hago para que el eval() definido en una clase base sepa
sobre tipos definidos en sus clases derivadas?
Se puede hacer de forma simple o se debe pasar un "contexto" como parámetro?
Gracias por su tiempo!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20170303/d638a1e7/attachment.html>
Más información sobre la lista de distribución pyar