Python NotImplemented常数

发布于 2021-01-29 17:35:36

纵览decimal.py,它NotImplemented在许多特殊方法中使用。例如

class A(object):
    def __lt__(self, a):
        return NotImplemented

    def __add__(self, a):
        return NotImplemented

Python的文件说

未实现

可以通过“丰富的比较”特殊方法(__eq__()__lt__()和)返回的特殊值,以指示未针对其他类型实现比较。

它没有讨论其他特殊方法,也没有描述行为。

它似乎是一个魔术对象,如果从其他特殊方法返回则引发该对象TypeError,并且在“丰富比较”中特殊方法什么也不做。

例如

print A() < A()

打印True,但是

print A() + 1

提高了TypeError,所以我对正在发生的事情以及NotImplemented的用法/行为感到好奇。

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    NotImplemented允许您指出尚未执行两个给定操作数之间的比较(而不是表明该比较有效,但False对于这两个操作数却产生yield )。

    Python语言参考中

    对于对象x和y,首先x.__op__(y) 尝试。如果未实现或返回NotImplemented,请
    y.__rop__(x)尝试。如果也未实现或返回NotImplemented,则引发TypeError异常。但是请参见以下异常:

    上一项的例外:如果左操作数是内置类型或新样式类的实例,而右操作数是该类型或类的适当子类的实例,并且覆盖基数的__rop__()方法,则右操作的__rop__()方法是左操作的尝试过__op__()
    的方法。这样做是为了使子类可以完全覆盖二进制运算符。否则,左操作数的__op__()方法将始终接受右操作数:当期望给定类的实例时,该类的子类的实例总是可接受的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看