How to make a python class instance global in scope using exec and eval? -
i have 3 files follows:
1) main.py:
from global_file import globalclass,evalcodeclass,execcodeclass sub_file import makeclassinstances if __name__ == "__main__": globalclassinstance = makeclassinstances() print "in main: globalclassinstance.name=",globalclassinstance.name print "in main: globalclassinstance.classvar=",globalclassinstance.classvar print "in main: globalclassinstance.classinstances['b']=",globalclassinstance.classinstances['b'] globalclassinstance.classinstances['b'].run()
2) global_file.py:
global globalclassinstance class globalclass(): def __init__(self): self.classvar = none self.name = 'howdy' self.classinstances = {} class evalcodeclass(): def __init__(self,name=none): self.code = "globalclassinstance.classvar" def run(self,caller=none): exec self.code in globals() class execcodeclass(): def __init__(self,name=none): self.code = "globalclassinstance.classvar='hello'" def run(self,caller=none): exec self.code in globals()
3) sub_file.py:
from global_file import globalclass,evalcodeclass,execcodeclass def makeclassinstances(): globalclassinstance = globalclass() print globalclassinstance.name evalcodeinstance = evalcodeclass('a') execcodeinstance = execcodeclass('b') globalclassinstance.classinstances['a'] = evalcodeinstance globalclassinstance.classinstances['b'] = execcodeinstance return globalclassinstance
i hoping able use exec
, eval
functions set instance globalclassinstance
class variable classvar
, seems globalclassinstance
cannot found when these separated across files this.
i following:
howdy in main: globalclassinstance.name= howdy in main: globalclassinstance.classvar= none in main: globalclassinstance.classinstances['b']= <global_file.execcodeclass instance @ 0x03131d00> traceback (most recent call last): file "c:\users\shinn\documents\python\nltk\statemachine\new folder\main_file.py", line 9, in <module> globalclassinstance.classinstances['b'].run() file "c:\users\shinn\documents\python\nltk\statemachine\new folder\global_file.py", line 20, in run exec self.code in globals() file "<string>", line 1, in <module> nameerror: name 'globalclassinstance' not defined >>>
this works ok when code in single file. i've tried lot of variations on using global keyword, still can't eval or exec code in other class instances figure out how reference globalclass
.
your appreciated - i'm sure i'm idiot ;-)
Comments
Post a Comment