Use typing.AbstractSet for the ABC (there was an unfortunate naming
conflict -- we have dict and Mapping, list and Sequence, but set and Set...)

On Wed, Aug 26, 2020 at 2:16 PM Alex Hall <alex.moj...@gmail.com> wrote:

> On Wed, Aug 26, 2020 at 10:10 PM Christopher Barker <python...@gmail.com>
> wrote:
>
>> Honestly, I haven't delved into type checking much, so maybe I'm making
>> this up, but what if you write a function that is type hinted to take a
>> Mapping, and uses | or |=, and all the test code uses a built in dict, and
>> all seems to be well.
>>
>
> This made me curious so I did an experiment, but with Set because I
> couldn't be bothered to worry about Python versions. This code:
>
> ```
>
> import typing
> import collections
> import builtins
>
> def foo(t: typing.Set, c: collections.Set, b: builtins.set):
>     print(t + t)
>     print(t | t)
>     print(t.union(t))
>
>     print(c + c)
>     print(c | c)
>     print(c.union(c))
>
>     print(b + b)
>     print(b | b)
>     print(b.union(b))
>
> ```
>
> complains about `+` (as it should) and `c.union` in both PyCharm and mypy,
> and nothing else. So typing.Set is based on the builtin and not the ABC. If
> you want to support any subclass of collections.Set, your type hint needs
> to be collections.Set. Using typing.Set will fail to show warnings when you
> use a builtin only method, and will show warnings when you try to assign an
> ABC set (e.g. I get a warning with `foo(t=<instance of
> collections.abc.Set>)`. The problem then is that `collections.abc.Set[int]`
> doesn't work, i.e. you need to use typing.Set if you want generics.
>


-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HNB7GNDRX5MFRHRIFHJIR2A6U6SH3QK5/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to