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