3

要为我的 CPython 扩展类型实现 != 和 == ,我应该实现tp_comparetp_richcompare还是两者都实现?

在什么情况下分别调用它们?

4

1 回答 1

6

tp_richcompare类似于Python语言本身丰富的比较特殊方法。它优先于tp_compare在类上调用比较运算符时选择。

tp_richcompare当您想要更好地控制比较逻辑时使用。例如,可能有一种非常便宜的方法来确定相等性,但不是优先级。Saymemcmp(a, b, sizeof(*a)) == 0表示两个非常复杂的数据结构相等,但memcmp(a, b, sizeof(*a)) < 0不表示a小于b,而是需要昂贵的算法来确定。该tp_compare函数将要求您始终使用昂贵的算法来返回a-1或. OTOH 函数告诉您要进行哪种比较,因此您可以根据手头的需要选择昂贵或便宜的算法。01tp_richcompare

的另一个优点tp_richcompare是您可以为没有意义的操作引发异常,例如空间中的u < v位置uv是点。

于 2010-05-19T13:55:25.300 回答