Constraints on __sub__, __eq__, etc.

Roald de Vries rdv at roalddevries.nl
Fri Feb 19 05:30:40 EST 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
 >>> True == False == False
False
 >>> (True == False) == False
True

Anybody knows how why this is so?






More information about the Python-list mailing list