[Python-ideas] A "compound" object for Python like in ABC
David Townshend
aquavitae69 at gmail.com
Wed Aug 17 10:45:45 CEST 2011
Maybe I'm missing something, but I can't see the advantage of this over the
current dict. Why would you want to create an individual key/value pair,
and why not just use a tuple?
On Wed, Aug 17, 2011 at 10:10 AM, Mark Janssen <dreamingforward at gmail.com>wrote:
> Just throwing out an idea here. I want to consider the programming
> value of a Compound data type, such as found in the ABC programming
> language.
> I think it could considerably simplify Python in several different
> ways although it would require some significant changes.
>
> Crudely, a Compound is simply the ability to associate a label or key
> with an object -- flatly; i.e. in a "planar" dimension rather than a
> depth dimension like one might do with a variable name.
> We can denote a Compound with a (key:value) syntax, using a colon to
> signify the relationshiop.
> Compounds may collide when they are put into a Set (if their keys are
> the same). The default behavior can be like dict: overwrite the value
> -- but users can subclass the Compound data type and specify what to
> do. In the case of a Bag, it could __add__ the values; in the case of
> a database, it could throw an exception, etc.
> A Compound also has a __default__ value in the case of colliding with
> a non-compound type. For a countable Compound this would likely be 1.
>
> A dictionary becomes simply a set of Compounds; for example, {'a':1,
> 'b':2} is a *set* containing two Compound data elements.
> Nicely, this allows the empty set to have the normal syntax of "{}".
> Set would have to add the [] set/getitem syntax to deal with the
> common case of possible compound relationships among its members. It
> would return None if the item is not a Compound type otherwise it
> returns the compound's value.
> Additionally, set should NOT quietly ignore adding a duplicate
> element, they should collide and python's pre-defined collision
> behavior decides what happens.
>
> Creating a bag (or Counter) container now becomes very simple: make a
> Compound that run the add function for collisions.
> As another example, a Node (in a graph) is now simply
> "Node1":{"edge1", "edge2"} (a Compound) and a Graph simply a set of
> such Compounds.
>
> Some other possibilities: the Compound is a special data type that
> exist in the border between an atom and a collection. The Compound's
> constructor can exploit this. If a collection is passed as the first
> paramater to the compound's constructor, all sorts of things can be
> done. Compound(myset, 1) could return a dictionary with all values
> set to 1. Given a list instead, it could return an enumeration.
>
> This is all rather sloppy, but I wanted to put it out here to see what
> kind of interest there might be....
>
> Mark
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20110817/905b612f/attachment.html>
More information about the Python-ideas
mailing list