[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