Oops. Answered before I finished reading the question. James
On Monday 24 October 2005 19:53, Ron Adam wrote: > James Stroud wrote: > > Here it goes with a little less overhead: > > > > > > py> class namespace: > > ... def __init__(self, adict): > > ... self.__dict__.update(adict) > > ... > > py> n = namespace({'bob':1, 'carol':2, 'ted':3, 'alice':4}) > > py> n.bob > > 1 > > py> n.ted > > 3 > > > > James > > But it's not a dictionary anymore so you can't use it in the same places > you would use a dictionary. > > foo(**n) > > Would raise an error. > > So I couldn't do: > > def foo(**kwds): > kwds = namespace(kwds) > kwds.bob = 3 > kwds.alice = 5 > ... > bar(**kwds) #<--- do something with changed items > > Ron > > > On Monday 24 October 2005 19:06, Ron Adam wrote: > >>Hi, I found the following to be a useful way to access arguments after > >>they are passed to a function that collects them with **kwds. > >> > >> > >> class namespace(dict): > >> def __getattr__(self, name): > >> return self.__getitem__(name) > >> def __setattr__(self, name, value): > >> self.__setitem__(name, value) > >> def __delattr__(self, name): > >> self.__delitem__(name) > >> > >> def foo(**kwds): > >> kwds = namespace(kwds) > >> print kwds.color, kwds.size, kwds.shape etc.... > >> > >> foo( color='red', size='large', shape='ball', .... etc..) > >> > >> > >>It just seems awkward to have to use "string keys" in this situation. > >>This is easy and still retains the dictionary so it can be modified and > >>passed to another function or method as kwds again. > >> > >>Any thoughts? Any better way to do this? > >> > >>Cheers, Ron -- James Stroud UCLA-DOE Institute for Genomics and Proteomics Box 951570 Los Angeles, CA 90095 http://www.jamesstroud.com/ -- http://mail.python.org/mailman/listinfo/python-list