Python NotImplemented constant

前端 未结 3 1537
后悔当初
后悔当初 2020-12-10 00:37

Looking through decimal.py, it uses NotImplemented in many special methods. e.g.

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


        
3条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-10 01:33

    It actually has the same meaning when returned from __add__ as from __lt__, the difference is Python 2.x is trying other ways of comparing the objects before giving up. Python 3.x does raise a TypeError. In fact, Python can try other things for __add__ as well, look at __radd__ and (though I'm fuzzy on it) __coerce__.

    # 2.6
    >>> class A(object):
    ...   def __lt__(self, other):
    ...     return NotImplemented
    >>> A() < A()
    True
    
    # 3.1
    >>> class A(object):
    ...   def __lt__(self, other):
    ...     return NotImplemented
    >>> A() < A()
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: unorderable types: A() < A()
    

    See Ordering Comparisions (3.0 docs) for more info.

提交回复
热议问题