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

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -