2010-05-19 34 views

回答

6

tp_richcompare类似于Python语言本身的丰富比较special methods。当在类上调用比较运算符时,优先选择tp_compare

当您希望更好地控制比较逻辑时,使用tp_richcompare。例如,确定平等可能是一种非常便宜的方法,但不是优先。假设memcmp(a, b, sizeof(*a)) == 0表示两个非常复杂的数据结构相等,但memcmp(a, b, sizeof(*a)) < 0并不表示a小于b,而这需要一个昂贵的算法来确定。 tp_compare功能需要您始终使用昂贵的算法才能返回-101。 函数OTOH告诉您哪个比较是有意的,因此您可以根据需要选择昂贵的算法还是廉价的算法。

tp_richcompare另外一个优点是可以提高对操作没有意义,如u < v例外情况uv是空间中的点。

+0

+1,很好的解释! – 2010-05-19 14:24:15

+1

谢谢,这很清楚。我是否认为如果我决定实施'tp_richcompare',我还应该实现'tp_compare'来支持内置的'cmp'功能? – 2010-05-19 14:27:27

+0

@詹姆斯:好问题;我真的不知道。我会冒险猜测'cmp'没有利用丰富的比较函数,因为它太笨拙了,特别是因为没有假设富比较之间的关系('<'不必与'> ='相反) )。 – 2010-05-19 14:42:32