En Mon, 05 May 2008 11:08:02 -0300, Szabolcs <[EMAIL PROTECTED]> escribió:

On May 5, 12:24 pm, Duncan Booth <[EMAIL PROTECTED]> wrote:
Szabolcs <[EMAIL PROTECTED]> wrote:
> On May 5, 9:37 am, Szabolcs Horvát <[EMAIL PROTECTED]> wrote:
>> Gabriel Genellina wrote:

>> > Python doesn't require __add__ to be associative, so this should
>> > not be
> used as a general sum replacement.

>> It does not _require_ this, but using an __add__ that is not
>> commutative and associative, or has side effects, would qualify as a
>> serious misuse, anyway.

> Sorry, I meant associative only, not commutative.

Unfortunately an __add__ which is not associative is actually perfectly
reasonable.

Well, 'reasonable' is a subjective notion in this case :-)  I have
never seen a non-associative use of the plus sign in maths, so I would
tend to take associativity for granted when seeing a + b + c in code,
therefore I would avoid such uses.  (Multiplication signs are a
different story.)  Of course others may feel differently about this,
and technically there's nothing in the way of using a non-associative
__add__! :)

You're approaching Python from a mathematical point of view, I presume?
Python has a perfectly defined meaning for a + b + c: simply, expressions are evaluated from left to right <http://docs.python.org/ref/evalorder.html>. a+b+c is the same as (a+b)+c and *not* the same thing as a+(b+c). Parenthesis aren't required in the first case, not because addition is associative, but because evaluation order is clearly defined. __add__, __mul__ and all other special methods can be used (and in fact, *are* used) for many kind of objects, not just numbers; the Tree example by Duncan Booth is a perfectly valid application. (Of course this usage can be abused, as any other feature, but it's not so common)

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to