2018年6月21日(木) 20:27 Jeroen Demeyer <j.deme...@ugent.be>: > Currently, we have: > > >>> [].append == [].append > False > > However, with a Python class: > > >>> class List(list): > ... def append(self, x): super().append(x) > >>> List().append == List().append > True > > In the former case, __self__ is compared using "is" and in the latter > case, it is compared using "==". > > I think that comparing using "==" is the right thing to do because "is" > is really an implementation detail.
I think "is" is correct because "bound to which object" is essential for bound (instance) methods. Consider > > >>> (10000).bit_length == (10000).bit_length > True > >>> (10000).bit_length == (10000+0).bit_length > False > I'm OK for this difference. This comparison is what people shouldn't do, like 'id(10000) == id(10000+0)' > I guess that's also the reason why CPython internally rarely uses "is" > for comparisons. > > See also: > - https://bugs.python.org/issue1617161 > - https://bugs.python.org/issue33925 > > Any opinions? > I think changing this may break some tricky code. Is it really worth enough to change? > > > Jeroen. > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/songofacandy%40gmail.com >
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com