[Python-Dev] Comparison and (user) confusion
Aahz
aahz at pythoncraft.com
Mon Jul 12 15:49:52 CEST 2004
On Thu, Jul 01, 2004, François Pinard wrote:
>
> The problem appeared when I sub-classed `list', and used a `__cmp__'
> method in my sub-type to effect a specialised sort. The sort did not
> behave as expected, as the `list' type provides rich comparisons, and
> that `sort', finding `__lt__', merely ignored my own `__cmp__'.
>
> I wonder if Python could not have helped better here, by diagnosing
> a possible comparison confusion while creating the sub-class. I do
> not know much know Python internals, but if C slots happen to be used
> for comparison methods, it might not be so unreasonable to expect such
> confusion to be detected whenever those slots are filled.
>
> I presume here, maybe wrongly, that it does not make good sense mixing
> rich and non-rich comparisons in the same class. Just a thought. :-)
There is one good reason for implementing both __cmp__() and rich
comparisons: when comparing is expensive, it makes sense to call cmp()
directly if you need the full three-way compare to branch. (Decimal is
a good example of this -- at least it was when I originally wrote it,
and it probably still has the same need now.)
While your question also makes sense, I'd say it's the province of
PyChecker rather than Python itself.
--
Aahz (aahz at pythoncraft.com) <*> http://www.pythoncraft.com/
"Typing is cheap. Thinking is expensive." --Roy Smith, c.l.py
More information about the Python-Dev
mailing list