根据
所以我的问题是:文档在哪里提到了在
object.__eq__()
文档,==
的默认实现(即在 object
类中)如下:True if x is y else NotImplemented
仍然按照文档中NotImplemented
的说明,我推断出NotImplemented
意味着Python运行时将尝试以另一种方式进行比较。即如果x.__eq__(y)
返回NotImplemented
(在==
操作符的情况下),则尝试y.__eq__(x)
。
现在,在Python 3.9中,以下代码会打印False
和True
:
class A:
pass
print(A() == A())
print(bool(NotImplemented))
所以我的问题是:文档在哪里提到了在
__eq__
上下文中NotImplemented
的特殊行为? PS:我在CPython源代码中找到了答案,但我猜这必须/应该出现在文档中。
x = A()
,y = A()
,print(x==x)
,print(x==y)
返回分别为True
和False
。 - BeRT2mex == x
首先使用身份进行比较:https://docs.python.org/3/c-api/object.html#c.PyObject_RichCompareBool - Ashwini ChaudharyA() == A()
中的对象存在足够长的时间以进行比较,它们必须是不同的对象。默认逻辑会使它们比较为false,因为它们不是同一个对象。 - Karl Knechtel