generic object - moving toward PEP

Robert Brewer fumanchu at amor.org
Sat Nov 20 01:14:26 CET 2004


Steven Bethard wrote:
> So I thought I'd try to summarize a few things here and maybe we can 
> move toward filing a PEP.  I'm not really sure I'm the right 
> person to 
> champion it because, as I've mentioned, I usually eventually replace 
> generic objects with concrete classes, but I'm certainly 
> willing to do 
> some of the work writing it up, etc.  If you're interested in helping 
> me, let me know (off-list).
> 
> Some quotes from this thread:
> 
> Hung Jung Lu wrote:
>  > It seems odd that there is no standard generic object in Python.
> 
> Fernando Perez wrote:
>  > IPython has this fairly fancy Struct module, which is 
> yet-another-shot
>  > at the same thing.
> [snip]
>  > But if someone does add a fully functional contribution of 
> this kind,
>  > with enough bells and whistles to cover the more advanced 
> cases, I'd
>  > be +100 on that :)
> 
> Some arguments for a generic object:
> 
> (1) Allows a simple syntax for returning named results:
> 
>  >>> def f(x):
> ... 	return bunch(double=2*x, squared=x**2)
> ...
>  >>> y = f(10)
>  >>> y.double
> 20
>  >>> y.squared
> 100
> 
> (2) Allows simple representation of hierarchical data:
> 
>  >>> x = bunch(a=bunch(b=1, c=10), d=100)
>  >>> x.a.b
> 1
>  >>> x.d
> 100
> 
> Note that without a generic object class of some sort this would 
> probably be written as something like:
> 
>  >>> class C1(object):
> ... 	def __init__(self, a, d):
> ... 		self.a, self.d = a, d
> ... 		
>  >>> class C2(object):
> ... 	def __init__(self, b, c):
> ... 		self.b, self.c = b, c
> ... 		
>  >>> x = C1(a=C2(b=1, c=10), d=100)

No, it would be written:

>>> x = dict(a=dict(b=1, c=10), d=100)

I don't see anything bunch offers over dict() for this example. If
you're returning a value that needs to be unpacked positionally, use a
tuple. If it needs to be unpacked lexically, use a dict. I have yet to
see an example where it's advantageous to support both, while still
being able to use a simple, generic 'bunch' object--as soon as you need
both, you've outgrown "bunch".


Robert Brewer
MIS
Amor Ministries
fumanchu at amor.org



More information about the Python-list mailing list