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 <rep...@bugs.python.org>
<http://bugs.python.org/issue12067>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to