假设我定义了一个类 A
并且我不希望任何人在没有逃脱的情况下编写该类的不等式。
class A():
def __ne__(self, other):
return NotImplemented
print(A() != A())
但这会打印出
True
并且不会引发 TypeError
尽管我故意“关闭”了 !=
运算符? 最佳答案
当您返回 NotImplemented
时,您表示您不知道 __ne__
应该返回 True
还是 False
。
通常,Python 会交换操作数;如果 a != b
导致 NotImplemented
,它会尝试 b != a
。这也会在这里失败,因为您在运算符的两侧使用相同的类型。对于 !=
运算符,Python 将回退到比较它们的内存地址,而这些地址并不相同(两个单独的实例),因此返回 False。
请参阅 do_richcompare
C function for details 。
如果这是您的预期结果,您将不得不手动提高 TypeError()
。
关于python - 为什么 NotImplemented 不会引发 TypeError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13516357/