diff options
author | Guido van Rossum <guido@python.org> | 2008-01-06 00:09:11 +0000 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2008-01-06 00:09:11 +0000 |
commit | ab078ddb4f8a7ac68f54a3c7f110f4d82e82b16f (patch) | |
tree | 471d852049d8c8525ca9dd6aea46d9e549ce9ea7 | |
parent | 673f7efa08850e42d077cab38683be2e4764b876 (diff) | |
download | cpython-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.py | 16 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/typeobject.c | 5 |
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) @@ -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; |