[Python-Dev] Intricacies of calling __eq__
Terry Reedy
tjreedy at udel.edu
Tue Mar 18 10:05:56 CET 2014
On 3/18/2014 3:52 AM, Maciej Fijalkowski wrote:
> Hi
>
> I have a question about calling __eq__ in some cases.
>
> We're thinking about doing an optimization where say:
>
> if x in d:
> return d[x]
if d.__contains__(x): return d.__getitem__(x)
I do not see any requirement to call x.__eq__ any particular number of
times. The implementation of d might always call somekey.__eq__(x). The
concept of sets (and dicts) requires coherent equality comparisons.
> where d is a dict would result in only one dict lookup (the second one
> being constant folded away). The question is whether it's ok to do it,
> despite the fact that it changes the semantics on how many times
> __eq__ is called on x.
A __eq__ that has side-effects violates the intended and expected
semanitics of __eq__.
--
Terry Jan Reedy
More information about the Python-Dev
mailing list