Terry J. Reedy added the comment:
In py3, *everything* is an instance of class object. This makes like simple
than in 2.x. The default comparison rules are set by the rich comparison
methods of object. 'By experiment' meant by experiments with instances of
object, which use those default methods, rather than by inspection of the
relevant .c source code. Instances of subclasses taht do not override the
defaults would act the same. Here is what seem to be the default code, from
object.c, do_compare. It verifies what I said (v, w are pointers, which
represent identity):
/* If neither object implements it, provide a sensible default
for == and !=, but raise an exception for ordering. */
switch (op) {
case Py_EQ:
res = (v == w) ? Py_True : Py_False;
break;
case Py_NE:
res = (v != w) ? Py_True : Py_False;
break;
default:
/* XXX Special-case None so it doesn't show as NoneType() */
PyErr_Format(PyExc_TypeError,
"unorderable types: %.100s() %s %.100s()",
v->ob_type->tp_name,
opstrings[op],
w->ob_type->tp_name);
return NULL;
}
Py_INCREF(res);
return res;
Subclasses can and ofter do override the default methods. In particular, the
number subclasses compare by value, across number types.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue12067>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com