Python NotImplemented常数
纵览decimal.py
,它NotImplemented
在许多特殊方法中使用。例如
class A(object):
def __lt__(self, a):
return NotImplemented
def __add__(self, a):
return NotImplemented
未实现
可以通过“丰富的比较”特殊方法(
__eq__()
,__lt__()
和)返回的特殊值,以指示未针对其他类型实现比较。
它没有讨论其他特殊方法,也没有描述行为。
它似乎是一个魔术对象,如果从其他特殊方法返回则引发该对象TypeError
,并且在“丰富比较”中特殊方法什么也不做。
例如
print A() < A()
打印True
,但是
print A() + 1
提高了TypeError
,所以我对正在发生的事情以及NotImplemented的用法/行为感到好奇。
-
NotImplemented
允许您指出尚未执行两个给定操作数之间的比较(而不是表明该比较有效,但False
对于这两个操作数却产生yield )。对于对象x和y,首先
x.__op__(y)
尝试。如果未实现或返回NotImplemented,请
y.__rop__(x)
尝试。如果也未实现或返回NotImplemented,则引发TypeError异常。但是请参见以下异常:上一项的例外:如果左操作数是内置类型或新样式类的实例,而右操作数是该类型或类的适当子类的实例,并且覆盖基数的
__rop__()
方法,则右操作的__rop__()
方法是左操作的尝试过__op__()
的方法。这样做是为了使子类可以完全覆盖二进制运算符。否则,左操作数的__op__()
方法将始终接受右操作数:当期望给定类的实例时,该类的子类的实例总是可接受的。