PEP 585: updates green-lighted by Lukasz #1289
Conversation
- Rename __parameters__ to __args__, for typing.py compatibility
- Genericize, re.{Pattern,Match} and io.IO
- list != list[int], but list[int] == list[int] (and list[str] != list[int])
- Add a lazy __parameters__ that contains the unique type vars in __args__ (also for typing.py compatibility)
- make dict[str][str] fail, but dict[T, str][int] return dict[int, str]
- expose proxy type as types.GenericAlias
| @@ -112,6 +112,9 @@ Python 3.9, the following collections become generic using | |||
| * ``collections.abc.ValuesView`` | |||
| * ``contextlib.AbstractContextManager`` # typing.ContextManager | |||
| * ``contextlib.AbstractAsyncContextManager`` # typing.AsyncContextManager | |||
| * ``re.Pattern`` # typing.Pattern, typing.re.Pattern | |||
| * ``re.Match`` # typing.Match, typing.re.Match | |||
| * ``io.IO`` # typing.IO, typing.io.IO | |||
|
|
|||
ethanhs
Feb 5, 2020
Contributor
I believe there are still other containers that should be made generic like queue.*Queue, should the PEP enumerate all of them?
gvanrossum
Feb 5, 2020
Author
Member
Honestly I think the PEP should stick to things that are currently shadowed in typing.py. Once we have GenericAlias it's easy enough to make other classes generic.
| @@ -112,6 +112,9 @@ Python 3.9, the following collections become generic using | |||
| * ``collections.abc.ValuesView`` | |||
| * ``contextlib.AbstractContextManager`` # typing.ContextManager | |||
| * ``contextlib.AbstractAsyncContextManager`` # typing.AsyncContextManager | |||
| * ``re.Pattern`` # typing.Pattern, typing.re.Pattern | |||
| * ``re.Match`` # typing.Match, typing.re.Match | |||
| * ``io.IO`` # typing.IO, typing.io.IO | |||
gvanrossum
Feb 5, 2020
Author
Member
Oh, yeah. I'll scratch this line. (Now I'm wondering if perhaps we shouldn't have messed with IOBase in the code branch?)
ethanhs
Feb 5, 2020
Contributor
Yeah I doubt people will have io.IOBase imported anyway, I'll make a PR to roll that back.
gvanrossum
Feb 5, 2020
Author
Member
OK, that makes sense. io.IOBase is not generic in typeshed. I just goofed up here.
* Rename __parameters__ to __args__, for typing.py compatibility
* Genericize, re.{Pattern,Match} and io.IO
* list != list[int], but list[int] == list[int] (and list[str] != list[int])
* Add a lazy __parameters__ that contains the unique type vars in __args__ (also for typing.py compatibility)
* make dict[str][str] fail, but dict[T, str][int] return dict[int, str]
* expose proxy type as types.GenericAlias
* Link to implementation
* Explicitly state that pickling or copying should work

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.

__parameters__to__args__, for typing.py compatibilityand io.IO__parameters__that contains the unique type vars in__args__(also for typing.py compatibility)