假设我定义了一个类 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/

10-11 21:46