summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2008-01-06 00:09:11 +0000
committerGuido van Rossum <guido@python.org>2008-01-06 00:09:11 +0000
commitab078ddb4f8a7ac68f54a3c7f110f4d82e82b16f (patch)
tree471d852049d8c8525ca9dd6aea46d9e549ce9ea7
parent673f7efa08850e42d077cab38683be2e4764b876 (diff)
downloadcpython-git-ab078ddb4f8a7ac68f54a3c7f110f4d82e82b16f.tar.gz
Issue #1393: object_richcompare() returns NotImplemented instead of
False if the objects aren't equal, to give the other side a chance.
-rw-r--r--Lib/test/test_compare.py16
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/typeobject.c5
3 files changed, 23 insertions, 1 deletions
diff --git a/Lib/test/test_compare.py b/Lib/test/test_compare.py
index c6608379a1..15fe3c2022 100644
--- a/Lib/test/test_compare.py
+++ b/Lib/test/test_compare.py
@@ -16,6 +16,13 @@ class Cmp:
def __eq__(self, other):
return self.arg == other
+class Anything:
+ def __eq__(self, other):
+ return True
+
+ def __ne__(self, other):
+ return False
+
class ComparisonTest(unittest.TestCase):
set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
set2 = [[1], (3,), None, Empty()]
@@ -45,6 +52,15 @@ class ComparisonTest(unittest.TestCase):
self.assertTrue(a == b)
self.assertFalse(a != b)
+ def test_issue_1393(self):
+ x = lambda: None
+ self.assertEqual(x, Anything())
+ self.assertEqual(Anything(), x)
+ y = object()
+ self.assertEqual(y, Anything())
+ self.assertEqual(Anything(), y)
+
+
def test_main():
test_support.run_unittest(ComparisonTest)
diff --git a/Misc/NEWS b/Misc/NEWS
index 22c4f869c5..72a28840e1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.0a3?
Core and Builtins
-----------------
+- Issue #1393: object_richcompare() returns NotImplemented instead of
+ False if the objects aren't equal, to give the other side a chance.
+
- Issue #1692: Interpreter was not displaying location of SyntaxError
- Improve some exception messages when Windows fails to load an extension
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 982eedb425..2a0dd2458a 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2484,7 +2484,10 @@ object_richcompare(PyObject *self, PyObject *other, int op)
switch (op) {
case Py_EQ:
- res = (self == other) ? Py_True : Py_False;
+ /* Return NotImplemented instead of False, so if two
+ objects are compared, both get a chance at the
+ comparison. See issue #1393. */
+ res = (self == other) ? Py_True : Py_NotImplemented;
Py_INCREF(res);
break;