假设我定义一个类名为
但是这将打印出
A
,我不想让任何人在没有排除的情况下写出该类的不等式。class A():
def __ne__(self, other):
return NotImplemented
print(A() != A())
但是这将打印出
True
,虽然我故意“关闭”了!=
运算符,并且不会引发TypeError
?
__ne__
两次,而是调用了6次 (一次是当slot_tp_richcompare
被PyObject_RichCompare
调用时,另外4次是当try_rich_compare
在正常和交换顺序时尝试)。最后,在default_3way_compare
中进行指针比较,由于需要转换为uintptr_t
才能支持排序,使得这个过程变得复杂。 - Eryk Sunpython-3.x
标签,我感到相当宽慰。如果要详细说明在 Python 2 中如何工作,那么答案会变得 稍微 冗长一些。然而,对于A() != A()
,我只计算了 4 次对__ne__
的调用,按照 LR、RL、RL、LR(左手和右手实例)的顺序。 - Martijn Pieters