2.2.4 Object Comparison
cmpfunc tp_compare;
The tp_compare handler is called when comparisons are needed
and the object does not implement the specific rich comparison method
which matches the requested comparison. (It is always used if defined
and the PyObject_Compare() or PyObject_Cmp()
functions are used, or if cmp() is used from Python.)
It is analogous to the __cmp__() method. This function
should return -1
if obj1 is less than
obj2, 0
if they are equal, and 1
if
obj1 is greater than
obj2.
(It was previously allowed to return arbitrary negative or positive
integers for less than and greater than, respectively; as of Python
2.2, this is no longer allowed. In the future, other return values
may be assigned a different meaning.)
A tp_compare handler may raise an exception. In this case it should return a negative value. The caller has to test for the exception using PyErr_Occurred().
Here is a sample implementation:
static int newdatatype_compare(newdatatypeobject * obj1, newdatatypeobject * obj2) { long result; if (obj1->obj_UnderlyingDatatypePtr->size < obj2->obj_UnderlyingDatatypePtr->size) { result = -1; } else if (obj1->obj_UnderlyingDatatypePtr->size > obj2->obj_UnderlyingDatatypePtr->size) { result = 1; } else { result = 0; } return result; }
See About this document... for information on suggesting changes.