[Tutor] How to load a dict into a dict subclass?

John jfabiani at yolo.com
Tue Oct 27 16:20:58 CET 2009


On Tuesday 27 October 2009 06:25:13 am John wrote:
> I use a 'SuperDict' all the time in my code. Not sure it's a good idea, but
> I find it convenient. Also, I wouldn't mind comments on why/why not to use
> something like this:
>
> class SuperDict(dict):
>     def __getattr__(self, attr):
>         return self[attr]
>     def __setattr__(self, attr, value):
>         self[attr] = value
>
>     def set_with_dict(self,D):
>         """ set attributes with a dict """
>         for k in D.keys():
>             self.__setattr__(k,D[k])
>
> Here's the original thread (NOTE: I have also been trying to use more
> structured arrays as recommended by one poster):
> http://www.nabble.com/creating-a-dict-like-class---asigning-variables...-th
>is-one-may-take-some-thought--%29-td23759398.html
>
> On Tue, Oct 27, 2009 at 1:45 PM, Christian Witts 
<cwitts at compuscan.co.za>wrote:
> > Modulok wrote:
> >> List,
> >>
> >> I'm new to the list, (somewhat new to python too). My code feels
> >> hacky. I'd like to know if there is a more eloquent way (more below).
> >> If not, a general thumbs up from more experienced programmers would be
> >> great!
> >>
> >> Assume I have a dict, 'foo'. I also have my own class, 'Bar', which
> >> subclasses (i.e. is a derived class) of a dict. How do I eloquently
> >> get foo into an instace of Bar? Example:
> >>
> >>
> >> ### BEGIN CODE:
> >> class Bar(dict):
> >>   pass # Act like a dict for now.
> >>
> >> foo = {'a': 100, 'b': 200, 'c': 300} # This could be a function return
> >> value.
> >> myvar = Bar()
> >> # The hacky feeling part:
> >> for k,v in foo.items(): myvar[k] = v
> >>
> >> ### END CODE
> >>
> >> Obviously I can put the dict into an instance variable, but then
> >> methods like 'keys()' and such won't work. If that makes any sense...
> >>
> >> Thanks guys!
> >> -Modulok-
> >> _______________________________________________
> >> Tutor maillist  -  Tutor at python.org
> >> To unsubscribe or change subscription options:
> >> http://mail.python.org/mailman/listinfo/tutor
> >
> > You can use the built-in function for dictionaries called update.  So
> >
> > >>> class Bar(dict):
> > >>>     pass
> > >>>
> > >>>
> > >>> foo = {'a':100, 'b':200, 'c': 300}
> > >>> myvar = Bar()
> > >>> myvar.update(foo)
> > >>> myvar
> >
> > {'a': 100, 'c': 300, 'b': 200}
> >
> > --
> > Kind Regards,
> > Christian Witts


Hey guru's could one of you explain why such a subclass is needed.  How would 
it be used.  I'm not sure but does not the deepcopy() work as above?


Thanks
Johnf




More information about the Tutor mailing list