On Fri, Feb 19, 2010 at 2:30 AM, Roald de Vries <r...@roalddevries.nl> wrote: > On Feb 18, 2010, at 5:28 PM, Stephen Hansen wrote: >> On Thu, Feb 18, 2010 at 8:19 AM, Andrey Fedorov >> <anfedo...@gmail.com>wrote: >>> >>> It seems intuitive to me that the magic methods for overriding the +, -, >>> <, ==, >, etc. operators should have no sideffects on their operands. Also, >>> that == should be commutative and transitive, that > and < should be >>> transitive, and anti-commutative. >>> >>> Is this intuition written up in a PEP, or assumed to follow from the >>> mathematical meanings? >> >> It may be intuitive to you, but its not true, written down anywhere, nor >> assumed by the language, and the mathematical meaning of the operators >> doesn't matter to Python. Python purposefully does not enforce anything for >> these methods. > > Still, it's clear that (for example) '==' is not just a normal function > call. Look at this example (in ipython): > >>>> False == False == False > True >>>> True == False == False > False >>>> (True == False) == False > True > > Anybody knows how why this is so?
Python is smart enough to recognize chained comparisons and do The Right Thing (tm). `X == Y == Z` is equivalent to `X == Y and Y == Z`. Same goes for the other comparison operators besides == and also possibly for longer chains. Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list