Differences of "!=" operator behavior in python3 and python2 [ bug? ]

Rotwang sg552 at hotmail.co.uk
Sun May 12 19:52:18 EDT 2013


On 13/05/2013 00:40, Ian Kelly wrote:
> On Sun, May 12, 2013 at 5:23 PM, Mr. Joe <titanix88 at gmail.com> wrote:
>> I seem to stumble upon a situation where "!=" operator misbehaves in
>> python2.x. Not sure if it's my misunderstanding or a bug in python
>> implementation. Here's a demo code to reproduce the behavior -
>
> The != operator is implemented by the __ne__ special method.  In
> Python 3, the default implementation of __ne__ is to call __eq__ and
> return the opposite of whatever it returns.

One should be aware, however, that this doesn't necessarily apply to 
classes inheriting from builtins other than object (a fact that recently 
bit me on the a***):

 >>> class spam:
	def __eq__(self, other):
		print('spam')
		return super().__eq__(other)

	
 >>> class eggs(list):
	def __eq__(self, other):
		print('eggs')
		return super().__eq__(other)

	
 >>> spam() != spam()
spam
spam
True
 >>> eggs() != eggs()
False



More information about the Python-list mailing list