## 4 オブジェクトの比較

        cmpfunc tp_compare;

`tp_compare` ハンドラは、オブジェクトどうしの比較が必要で、 そのオブジェクトに要求された比較をおこなうのに適した特定の拡張比較メソッドが 実装されていないときに呼び出されます。(これが定義されているとき、 `PyObject_Compare()` または `PyObject_Cmp()` が使われると これはつねに呼び出されます、また Python で `cmp()` が使われたときにも 呼び出されます。) これは `__cmp__()` メソッドに似ています。 この関数はもし obj1 が obj2 より「小さい」場合は `-1` を返し、 それらが等しければ `0`、そしてもし obj1 が obj2 より 「大きい」場合は`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;
    }