Confused again

Duncan Smith buzzard at urubu.freeserve.co.uk
Mon Feb 24 15:32:47 EST 2003


"Steven Taschuk" <staschuk at telusplanet.net> wrote in message
news:mailman.1046111679.25027.python-list at python.org...
> Quoth Duncan Smith:
>   [...]
> > p.s. Thanks also to Steven, and is there any detailed guidance available
on
> > overloading operators?  I've read the documentation and had a Google,
but
> > there's still a few things I'm not clear about.  [...]
>
> I use section 3.3 of the Language Reference, "Special method
> names", which is good documentation.  I don't know of a more
> tutorial-style document for these questions, I'm afraid.
>
> > [...] ie. Steven sorted out my
> > immediate problem (posted the day before last), but I'm still not 100%
sure
> > how I got a returned value of 0 when my code would appear to return 1.
>
> The return values of __cmp__ and __eq__ follow different
> conventions because they serve different purposes.  __cmp__ tests
> for order, returning
>     -1 if x < y    0 if x == y    1 if x > y
> while __eq__ merely tests for equality, returning
>     0 if x != y    1 if x == y
> Thus a translation step is needed if you want to implement == in
> terms of __cmp__.  It is this translation step which changed the 1
> your __cmp__ returned into a 0.
>
> In other words: your code returned 1, but not to the code which
> did the x == y test.  Rather, this 1 was returned to the code in
> the interpreter which implements ==; that code thought that 1 was
> following the __cmp__ convention, and so translated it to the
> __eq__ convention and returned the result (0) to the code which
> did the x == y test.
>
> --
> Steven Taschuk                          staschuk at telusplanet.net
> "Its force is immeasurable.  Even Computer cannot determine it."
>                             -- _Space: 1999_ episode "Black Sun"
>

Cheers.  Things are getting clearer.

Duncan






More information about the Python-list mailing list