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

Eric V. Smith eric at trueblade.com
Tue Feb 28 18:47:06 EST 2017


On 2/28/2017 6:35 PM, Jelle Zijlstra wrote:
> 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()".

Also, you go from the easy to google "python issubclass" to ... ?

Syntax is hard to search for.

Eric.




More information about the Python-ideas mailing list