By default, != returns the opposite of ==, unless the latter returns
NotImplemented. (Is this worth backporting to 2.6? It seems so useful...!)
This commit is contained in:
parent
a4335b1e6b
commit
e27dc72308
|
@ -39,6 +39,12 @@ class ComparisonTest(unittest.TestCase):
|
||||||
self.assertEqual(a == b, id(a) == id(b),
|
self.assertEqual(a == b, id(a) == id(b),
|
||||||
'a=%r, b=%r' % (a, b))
|
'a=%r, b=%r' % (a, b))
|
||||||
|
|
||||||
|
def test_ne_defaults_to_not_eq(self):
|
||||||
|
a = Cmp(1)
|
||||||
|
b = Cmp(1)
|
||||||
|
self.assertTrue(a == b)
|
||||||
|
self.assertFalse(a != b)
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
test_support.run_unittest(ComparisonTest)
|
test_support.run_unittest(ComparisonTest)
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,9 @@ TO DO
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- By default, != returns the opposite of ==, unless the latter returns
|
||||||
|
NotImplemented.
|
||||||
|
|
||||||
- Patch #1680961: sys.exitfunc has been removed and replaced with a private
|
- Patch #1680961: sys.exitfunc has been removed and replaced with a private
|
||||||
C-level API.
|
C-level API.
|
||||||
|
|
||||||
|
|
|
@ -2314,7 +2314,22 @@ object_richcompare(PyObject *self, PyObject *other, int op)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Py_NE:
|
case Py_NE:
|
||||||
res = (self != other) ? Py_True : Py_False;
|
/* By default, != returns the opposite of ==,
|
||||||
|
unless the latter returns NotImplemented. */
|
||||||
|
res = PyObject_RichCompare(self, other, Py_EQ);
|
||||||
|
if (res != NULL && res != Py_NotImplemented) {
|
||||||
|
int ok = PyObject_IsTrue(res);
|
||||||
|
Py_DECREF(res);
|
||||||
|
if (ok < 0)
|
||||||
|
res = NULL;
|
||||||
|
else {
|
||||||
|
if (ok)
|
||||||
|
res = Py_False;
|
||||||
|
else
|
||||||
|
res = Py_True;
|
||||||
|
Py_INCREF(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue