pre-PEP generic objects

Ian Bicking ianb at colorstudy.com
Sat Dec 4 23:12:36 EST 2004


Steven Bethard wrote:
> Ian Bicking wrote:
> 
>> class bunch(object):
>>     def __init__(self, **kw):
>>         for name, value in kw.items():
>>             # IMPORTANT!  This is subclass friendly: updating __dict__
>>             # is not!
>>             setattr(self, name, value)
> 
> 
> Good point about being subclass friendly...  I wonder if there's an easy 
> way of doing what update does though...  Update (and therefore __init__) 
> allows you to pass in a Bunch, dict, (key, value) sequence or keyword 
> arguments by taking advantage of dict's update method.  Is there a clean 
> way of supporting all these variants using setattr?

class bunch(object):
     def __init__(self, __seq=None, **kw):
         if __seq is not None:
             if hasattr(__seq, 'keys'):
                 for key in __seq:
                     setattr(self, key, __seq[key])
             else:
                 for name, value in __seq:
                     setattr(self, name, value)
         for name, value in kw.items():
             setattr(self, name, value)

That should match dict.update, at least from the 2.4 help(dict.update). 
  I'm not sure that will work for updating from a bunch object; also, 
bunch objects could have a 'keys' attribute without being dictionaries. 
  Do you get attributes from non-iterables through their __dict__?  I 
don't care for that at all.  Are bunch objects iterable?

-- 
Ian Bicking  /  ianb at colorstudy.com  / http://blog.ianbicking.org



More information about the Python-list mailing list