Jul*_*ian 5 python boolean python-3.x truthiness
这个问题的答案和讨论刺激了这个问题.以下代码段显示了问题的关键:
>>> bool(NotImplemented)
True
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
bool价值NotImplemented应该是True?它感觉是unpythonic.推理为什么我认为它不直观(请忽略缺乏最佳实践):
>>> class A:
... def something(self):
... return NotImplemented
...
>>> a = A()
>>> a.something()
NotImplemented
>>> if a.something():
... print("this is unintuitive")
...
this is unintuitive
Run Code Online (Sandbox Code Playgroud)
具有如此负面含义(缺乏实施)的东西似乎是一种奇怪的行为.
相关文字来自:
未实现
这应该由二进制特殊的方法被返回(如特殊的值
__eq__(),__lt__(),__add__(),__rsub__(),等等),以指示该操作不相对于另一种类型的实施; 可通过就地二进制特殊的方法(例如被返回__imul__(),__iand__()为了相同的目的,等等).它的真实价值是真实的.- 来自Python Docs
为了澄清我的立场,我觉得NotImplemented能够评估一个布尔值本身就是一种反模式.我觉得Exception更有意义,但流行的想法是在评估不同对象之间的比较时,出于性能原因选择常量单例.我想我正在寻找令人信服的理由,为什么这是选择的"方式".
che*_*ner 11
默认情况下,对象被视为truthy(bool(obj) == True),除非它的类提供了一种覆盖其真实性的方法.在的情况下NotImplemented,从来没有人提供了一个令人信服的用例为bool(NotImplemented)返回False,所以<class 'NotImplementedType'>从来没有提供覆盖.
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |