Antoon Pardon wrote: > Op 2005-12-16, Larry Bates schreef <[EMAIL PROTECTED]>: >> Antoon Pardon wrote: >>> I have the following little piece of code: >>> >>> class Cfg:pass >>> #config = Cfg() >>> >>> def assign(): >>> setattr(config, 'Start' , [13, 26, 29, 34]) >>> >>> def foo(): >>> config = Cfg() >>> dct = {'config':config, 'assign':assign} >>> exec "assign()" in dct >>> print config.Start >>> >>> foo() > >> [ ... ] >> >> You should probably post what you are trying to do. Maybe we >> can make a suggestion about the best approach. > > I'm using PLY. The assign function is a dumbded down version > of a production function that will be called during the parsing > of a config file. Each time a line of the form: > > var = val > > is encounterd I do setattr(config, 'var', val) > > The problem is that doing it this way means config needs to be global. > which I'm trying to avoid, in case some leftovers may cause trouble > when I read in a new configuration or should I ever have different > threads parsing files at the same time. > > The other way would be passing the 'config' variable around in the > productions, but this would complicate things. > > So what I am trying to do was provide a global namespace to the call > to fool a function using a global name into using a provided local name.
Maybe you could use a bound method? class Cfg: def assign(self): setattr(self, 'Start' , [13, 26, 29, 34]) def foo(): config = Cfg() namespace = dict(assign=config.assign) exec "assign()" in namespace print config.Start Peter -- http://mail.python.org/mailman/listinfo/python-list