> On 2017 Mar 2 , at 2:53 a, Stephan Houben <stephan...@gmail.com> wrote: > > A crucial difference between a set and a type is that you cannot > explicitly iterate over the elements of a type, so while we could implement > > x in int > > to do something useful, we cannot make > > for x in int: > print(x) >
__contains__ was introduced to provide a more efficient test than to simply iterate over the elements one by one. I don’t see why something has to be iterable in order to implement __contains__, though. class PositiveInts(int): def __contains__(self, x): return x > 0 N = PostiveInts() > Because if we could, we could implement Russell's paradox in Python: > > R = set(x for x in object if x not in x) > > print(R in R) object is not the equivalent of the paradoxical set of all sets. It’s closer to the set of all valid Python values. That includes all valid Python set values, but a Python set is not mathematical set; it’s a *finite* collection of *hashable* values. _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/