[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