> 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/

Reply via email to