tp_richcompare
аналогично расширенному сравнению специальных методов в самом языке Python. Он выбирается в предпочтении tp_compare
, когда в классе вызываются операторы сравнения.
Используйте tp_richcompare
, если вы хотите лучше контролировать логику сравнения. Например, может быть очень дешевый способ определить равенство, но не приоритет. Скажем, memcmp(a, b, sizeof(*a)) == 0
означает, что две очень сложные структуры данных равны, но memcmp(a, b, sizeof(*a)) < 0
не означает, что a
меньше b
, что вместо этого требует дорогостоящего алгоритма для определения. Функция tp_compare
требует, чтобы вы всегда использовали дорогостоящий алгоритм для возврата либо -1
, 0
, либо 1
. Функция tp_richcompare
OTOH сообщает вам, какое сравнение предназначено, поэтому вы можете выбрать либо дорогой, либо дешевый алгоритм, в зависимости от необходимости.
Дополнительным преимуществом tp_richcompare
является то, что вы можете вызывать исключения для операций, которые не имеют смысла, таких как u < v
, где u
и v
- это точки в пространстве.