NotImplemented
allows you to indicate that a comparison between the two given operands has not been implemented (rather than indicating that the comparison is valid, but yields False
, for the two operands).
From the Python Language Reference:
For objects x and y, first
x.__op__(y)
is tried. If this is not implemented
or returns NotImplemented,
y.__rop__(x)
is tried. If this is also
not implemented or returns
NotImplemented, a TypeError exception
is raised. But see the following
exception:
Exception to the previous
item: if the left operand is an
instance of a built-in type or a
new-style class, and the right operand
is an instance of a proper subclass of
that type or class and overrides the
base’s__rop__()
method, the right
operand’s__rop__()
method is tried
before the left operand’s__op__()
method. This is done so that a
subclass can completely override
binary operators. Otherwise, the left
operand’s__op__()
method would always
accept the right operand: when an
instance of a given class is expected,
an instance of a subclass of that
class is always acceptable.