Issue #1393: object_richcompare() returns NotImplemented instead of
False if the objects aren't equal, to give the other side a chance.
This commit is contained in:
parent
673f7efa08
commit
ab078ddb4f
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue