19.06.21 06:30, wyz2...@163.com пише: > Python raises TypeError when NotImplemented is returned from __add__, > __invert__ etc. and __radd__ etc. aren't available. > However, this disallows the customization of error messages. For example, in > Python 3.8, __float__ etc. were removed from complex to allow methods like > __rfloat__. But this makes abs(z) undiscoverable for many users. The original > error message is very helpful. > I suggest to make a way for this usage. Maybe NotImplementedType can accept > *args, and NotImplemented can be callable, equal to __init__: > >>>> class A: > def __add__(self, other): > return NotImplemented # Just like before > def __neg__(self, other): > return NotImplemented(f'bad operand type for unary -: > {type(self).__name__!r}; use ~ to invert') # <-- > def __invert__(self): > return ~5 >>>> a = A() >>>> a + 2 > TypeError: unsupported operand type(s) for +: 'A' and 'int' >>>> -a > TypeError: bad operand type for unary -: 'A'; use ~ to invert >>>> ~a > -6
NotImplemented is a singleton. And all code which tests for NotImplemented does it by checking identity. Returning any other object instead of the NotImplemented would not work. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/R6P566R4YQBRRB3KMEROK7FGSRIWJXCO/ Code of Conduct: http://python.org/psf/codeofconduct/