[Python-Dev] The role of NotImplemented: What is it for and when should it be used?

Antoine Pitrou solipsis at pitrou.net
Mon Nov 3 18:10:59 CET 2014


On Mon, 3 Nov 2014 09:05:43 -0800
Guido van Rossum <guido at python.org> wrote:
> Sorry, was too quick.  For immutable types __iop__ may not exist and then
> the fallback machinery should work normally using NotImplemented. But if
> __iop__ exists it can choose not to allow __rop__, because the type would
> presumably change. This is probably more predictable. I don't even know if
> the byte code interpreter looks for Not implemented from __iop__.

Apparently it can tell it to fallback on __op__:

>>> class C(list):
...   def __iadd__(self, other):
...     print("here")
...     return NotImplemented
... 
>>> c = C()
>>> c += [1]
here
>>> c
[1]
>>> type(c)
<class 'list'>


Regards

Antoine.


More information about the Python-Dev mailing list