On Fri, Dec 18, 2015 at 05:59:39PM -0500, Franklin? Lee wrote:
I see two options:
- comparison is explicitly NotImplemented. Any code that used it
should've used `is`.
We're still talking about equality between Mapping.values() views, correct?
I strongly dislike that option. I don't know of any std lib or built-in object which tries to prohibit equality comparisons. Of course your own custom classes can do anything they like, including rather silly things:
class Silly: def __eq__(self, other): x = random.choice([0, 1, 2]) if x == 2: raise ValueError return bool(x)
but I think that people expect that equality tests should always succeed, even if it falls back on the default object behaviour (namely identity comparison).
- comparison respects keys.
I'm not sure I understand what this means. If we have two dicts:
a = {1: None, 2: None} b = {1: None, 3: None}
are you suggesting that `a.values() == b.values()` should return False because the KEYS {1, 2} and {1, 3} are different?
"ValuesViews implement equality by comparing identity, because everything else is too hard" might not be useful, but at least it makes sense as an explanation. Whereas "ValuesViews implement equality by comparing keys" sounds like something I might have read in "PHP, A Fractal Of Bad Design" :-)