根据文档(在Python 3.8中):
默认情况下,
object
通过使用is
实现__eq __()
,在假比较的情况下返回NotImplemented
:True if x is y else NotImplemented
。
并且:
运算符符号和方法名称之间的对应关系如下:[...]
x==y
调用x.__eq__(y)
所以我期望:
==
等同于__eq__()
,并且- 一个没有明确定义
__eq__
的自定义类,在使用==
比较两个不同实例的类时返回NotImplemented
。 然而,在以下情况下,==
比较返回False
,而__eq__()
返回NotImplemented
:
class Dummy():
def __init__(self, a):
self.a = a
d1 = Dummy(3)
d2 = Dummy(3)
d1 == d2 # False
d1.__eq__(d2) # NotImplemented
为什么?