Annoying behaviour of the != operator

Fredrik Lundh fredrik at pythonware.com
Wed Jun 8 13:59:21 EDT 2005


Jordan Rastrick wrote:

> I just spent a long, long time tracking down a bug in a program that
> results from this behaviour.
>
> Surely the != operator should, if no __ne__ method is present for
> either object, check to see if an __eq__ method is defined, and if so,
> return its negation?
>
> Actually, that brings me to a wider question - why does __ne__ exist at
> all? Surely its completely inconsistent and unnessecary to have
> seperate equals and not equals methods on an object? a != b should just
> be a short way of writing not (a == b). The fact the two can give a
> different answer seems to me to be utterly unintuitive and a massive
> pitfall for beginners (such as myself).

surely reading the documentation would be a great way to avoid
pitfalls?

    http://docs.python.org/ref/customization.html

    __lt__, __le__ (etc)

    New in version 2.1. These are the so-called "rich comparison" methods,
    and are called for comparison operators in preference to __cmp__() below.

    /.../

    There are no implied relationships among the comparison operators. The
    truth of x==y does not imply that x!=y is false. Accordingly, when defining
    __eq__, one should also define __ne__ so that the operators will behave
    as expected.

    /.../

    __cmp__

    Called by comparison operations if rich comparison (see above) is not
    defined. Should return a negative integer if self < other, zero if self
    == other, a positive integer if self > other. /.../

for a number of situations where __ne__ cannot be derived from __eq__,
see:

    http://www.python.org/peps/pep-0207.html

</F>0






More information about the Python-list mailing list