python - Dynamically instantiating objects -


i'm attempting instantiate object string. specifically, i'm trying change this:

from node.mapper import mapper mapper = mapper(file) mapper.map(src, dst) 

into this:

with open('c:.../node/mapper.py', 'r') f:     mapping_script = f.read()  eval(mapping_script) mapper = mapper(file) mapper.map(src, dst) 

the motivation seemingly bizarre task able store different versions of mapping scripts in database , retrieve/use them needed (with emphasis on polymorphism of map() method).

the above not work. reason, eval() throws syntaxerror: invalid syntax. don't understand since it's same file that's being imported in first case. there reason why eval() cannot used define classes?

i should note aware of security concerns around eval(). love hear of alternative approaches if there any. other thing can think of fetch script, physically save node package directory, , import it, seems crazier.

you need use exec:

exec(mapping_script) 

eval() works expressions. exec() works statements. typical python script contains statements.

for example:

code = """class mapper: pass""" exec(code) mapper = mapper() print(mapper) 

output:

<__main__.mapper object @ 0x10ae326a0> 

make sure either call exec() (python 3, in python 2 statement) @ module level. when call in function, need add globals(), example exec(code, globals()), make objects available in global scope , rest of function discussed here.


Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

java - No use of nillable="0" in SOAP Webservice -

ubuntu - Laravel 5.2 quickstart guide gives Not Found Error -