1、__eq__方法返回NotImplemented的情况
None.__eq__('a')
通过None
直接调用__eq__
方法返回的是NotImplemented
,(1).__eq__('a')
和'a'.__eq__(1)
也返回NotImplemented
。
2、示例代码
class A: def __eq__(self, other): print('A.__eq__') return NotImplemented class B: def __eq__(self, other): print('B.__eq__') return NotImplemented class C: def __eq__(self, other): print('C.__eq__') return True a = A() b = B() c = C() print(a == b) # A.__eq__ # B.__eq__ # False print(a == c) # A.__eq__ # C.__eq__ # True print(c == a) # C.__eq__ # True
3、结论
None.__eq__("a")
等于True
的情况,由于None.__eq__("a")
返回NotImplemented
bool(NotImplemented)
是True
,所以bool(None.__eq__("a"))
就等于True
。这种bool(NotImplemented)
的特殊情况,值得注意一下。