这个问题是由对这个问题的回答和讨论引发的。以下片段显示了问题的症结所在:
>>> bool(NotImplemented)
True
我的问题如下:
- 为什么决定 的
bool
值NotImplemented
应该是True
?感觉很不合时宜。 - 我不知道有什么好的理由吗?文档似乎只是说,“因为它是”。
- 有没有以合理的方式使用它的例子?
推理为什么我认为它不直观(请忽略缺乏最佳实践):
>>> class A:
... def something(self):
... return NotImplemented
...
>>> a = A()
>>> a.something()
NotImplemented
>>> if a.something():
... print("this is unintuitive")
...
this is unintuitive
具有如此负面含义(缺乏实施)的事物被认为是真实的,这似乎是一种奇怪的行为。
相关文字来自:
未实现
__eq__()
二进制特殊方法(例如,__lt__()
,__add__()
,等)应返回的特殊值,__rsub__()
表示该操作未针对其他类型实现;可以由就地二进制特殊方法(例如 , 等)返回__imul__()
以__iand__()
用于相同目的。它的真值是真的。— 来自Python 文档
编辑 1
为了澄清我的立场,我觉得NotImplemented
能够评估为布尔值本身就是一种反模式。我觉得 Exception 更有意义,但普遍的想法是在评估不同对象之间的比较时出于性能原因选择常量单例。我想我正在寻找令人信服的理由来说明为什么这是选择的“方式”。