Вопрос

Для реализации! = И == Для моего типа расширения CPY, если я должен реализовать tp_compare, tp_richcompare или оба?

При каких обстоятельствах каждый из них называется?

Это было полезно?

Решение

tp_richcompare аналогичен богатому сравнению Специальные методы на самом языке питона. Это выбрано в предпочтении 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 указываются в космосе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top