[New-bugs-announce] [issue22978] Logical Negation of NotImplemented
Maytag Metalark
report at bugs.python.org
Tue Dec 2 15:12:04 CET 2014
New submission from Maytag Metalark:
Performing a logical negation (`not`) on `NotImplemented` should return `NotImplemented`. Currently, it returns `False`.
A common pattern for implementing __eq__ and __ne__ is to implement the comparison in __eq__, and simply delegate to it in __ne__ with a negation. However, if two values are incomparable, then __eq__ and __ne__ should both return NotImplemented. If you try to negate NotImplemented in __ne__, you will end up with a value of False, instead of NotImplemented, so you have to specifically test for this case.
For instance, here is how one would write the code now:
def __ne__(self, other):
eq = self.__eq__(other)
if eq is NotImplemented:
return NotImplemented
return not eq
Where as the following would be simpler, and could be used if this change was made:
def __ne__(self, other):
return not self.__eq__(other)
This is not simply sugar to reduce typing, it is safer because some coders may forget about NotImplemented and implement __ne__ as shown in the second example anyway, which is not actually correct with the current behavior.
----------
messages: 231996
nosy: Brian.Mearns
priority: normal
severity: normal
status: open
title: Logical Negation of NotImplemented
type: enhancement
versions: Python 2.7
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue22978>
_______________________________________
More information about the New-bugs-announce
mailing list