gpt4 book ai didi

python - 为什么 NotImplemented 不引发 TypeError?

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:58 25 4
gpt4 key购买 nike

假设我定义了一个类 A 并且我不希望任何人在不逃避的情况下编写该类的不等式。

class A():
def __ne__(self, other):
return NotImplemented
print(A() != A())

但这会打印出 True 并且不会引发 TypeError 尽管我故意“关闭”了 != 运算符?

最佳答案

当您返回 NotImplemented 时,表示您不知道 __ne__ 是否应该返回 True错误

通常,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com