namespace dictionaries ok?

James Stroud jstroud at mbi.ucla.edu
Tue Oct 25 01:09:48 EDT 2005


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/



More information about the Python-list mailing list