2.2.4 オブジェクトの比較

    cmpfunc tp_compare;

tp_compare ハンドラは、オブジェクトどうしの比較が必要で、 そのオブジェクトに要求された比較をおこなうのに適した特定の拡張比較メソッドが 実装されていないときに呼び出されます。(これが定義されているとき、 PyObject_Compare() または PyObject_Cmp() が使われると これはつねに呼び出されます、また Python で cmp() が使われたときにも 呼び出されます。) これは __cmp__() メソッドに似ています。 この関数はもし obj1obj2 より「小さい」場合は -1 を返し、 それらが等しければ 0、そしてもし obj1obj2 より 「大きい」場合は1 を返す必要があります。 (以前は大小比較の結果として、任意の大きさの負または正の整数を返せましたが、 Python 2.2 以降ではこれはもう許されていません。将来的には、上にあげた 以外の返り値は別の意味をもつ可能性があります。)

tp_compare ハンドラは例外を発生させられます。 この場合、この関数は負の値を返す必要があります。呼び出した側は PyErr_Occurred() を使って例外を検査しなければなりません。

以下はサンプル実装です:

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;
}

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。