为什么NotImplemented评估为True?

时间:2014-04-30 21:03:06

标签: python

我最近偶然发现了Python的内置NotImplemented。经过一些阅读后,我现在就明白了它的目的,但我不明白它为什么评价为True作为布尔值。以下示例使我觉得这对我来说是一种残酷的玩笑:

>>> class A:
...     def __eq__(self, other):
...         return NotImplemented
... 
>>> 
>>> a = A()
>>> a == 1
False
>>> bool(a.__eq__(1))
True

我的问题很简单:为什么NotImplemented评估为True

1 个答案:

答案 0 :(得分:11)

因为它不评估为False; 默认是考虑所有对象True,除非它们有length of 0(容器)或are zero(数字);请参阅Truth Value Testing reference

然而,向Python返回NotImplemented信号,表示未执行相等测试,而是尝试使用反(1).__eq__(a)。如果该方法也不存在,则如果对象不是同一个对象(a is 1False),则它们不相等。

换句话说,NotImplemented是一个特殊的单例对象,是一个向Python发信号的哨兵,你希望Python尝试别的东西,因为不支持这个对象和另一个对象之间的相等测试。

因此,它从未打算在布尔上下文中使用。它绝不意味着传达False