[Python-ideas] add __contains__ into the "type" object

Jelle Zijlstra jelle.zijlstra at gmail.com
Tue Feb 28 18:35:31 EST 2017

2017-02-28 15:12 GMT-08:00 Steven D'Aprano <steve at pearwood.info>:
> On Wed, Mar 01, 2017 at 07:02:23AM +0800, 语言破碎处 wrote:
>> where we use types?
>>     almost:
>>         isinstance(obj, T);
>>         # issubclass(S, T);
>> Note that TYPE is SET;
> What does that mean? I don't understand.
>>     if we add __contains__ and __le__ into "type",
>>     then things become:
>>         obj in T;
> But obj is **not** in T, since T is a type, not a container.

But in type theory, types are sets in some sense. For example, the
bool type is the set {True, False}, and the int type is the infinite
set {..., -1, 0, 1, ...}. Similarly, typing.py has a Union type:
Union[A, B] is the union of the types A and B. Subclasses are subsets
of their parent classes, because their set of possible values is a
subset of the possible values of their parent class.

The OP seems to be proposing that we reflect this identity between
types and sets in Python by spelling "isinstance(obj, T)" as "obj in
T" and "issubclass(S, T)" as "S <= T". This proposal has some solid
theory behind it and I don't think it would be hard to implement, but
it doesn't seem like a particularly useful change to me. It wouldn't
really enable anything we can't do now, and it may be confusing to
people reading code that "obj in list" does something completely
different from "obj in list()".

> "is-a" tests are not the same as "in" tests. They are completely
> unrelated comparisons.
> http://www.w3resource.com/java-tutorial/inheritance-composition-relationship.php
> The Wikipedia page on is-a is terribly complicated, but folks may get
> something from it:
> https://en.wikipedia.org/wiki/Is-a
> --
> Steve
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

More information about the Python-ideas mailing list