Constraints on __sub__, __eq__, etc.
Roald de Vries
rdv at roalddevries.nl
Fri Feb 19 11:30:40 CET 2010
On Feb 18, 2010, at 5:28 PM, Stephen Hansen wrote:
> On Thu, Feb 18, 2010 at 8:19 AM, Andrey Fedorov
> <anfedorov at 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 == False == False
>>> (True == False) == False
Anybody knows how why this is so?
More information about the Python-list