object as bunch (WAS Re: End of file)

Steven Bethard steven.bethard at gmail.com
Mon Oct 11 12:13:22 EDT 2004


Alex Martelli <aleaxit <at> yahoo.com> writes:
> 
> If an object() could be used as a Bunch I do think it would be
> reasonably common.  But it can't, so I insist that its role as
> sentinel/placeholder is the only possibility.

Anyone know what the design goal was that caused object not to be written to 
be used as a Bunch?

I'm not suggesting that I'd want to be able to set attributes from outside the 
class -- the fact that x23.foo = 23 is an AttributeError if x23 does not have 
a foo attribute is a Good Thing, IMHO -- but I can see that a **kwds 
constructor like dict() has might be useful:

>>> o = object(foo1=None, foo2=23)
>>> o.foo1
>>> o.foo2
23
>>> o.foo3 = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'object' object has no attribute 'foo3'

If object was a Bunch, you could also set the fields of a class in the call to 
object's __init__.  

>>> class C(object):
...     def __init__(self, foo23, foo57=None):
...             super(C, self).__init__(foo23=foo23, foo57=foo57)
...
>>> c = C(1)
>>> c.foo57
>>> c.foo23
1

Don't know if the fields behavior here really gains you anything, but it would 
be another side effect of object being a Bunch.

I have wanted from time to time to have a Bunch object.  Of course it's only 3 
lines of code to roll your own...  But I wouldn't mind hearing about the 
reasoning behind making object as it is...

Steve




More information about the Python-list mailing list