You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Remove ParamSpec from __parameters__ of most typing generics #88264
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/Fidget-Spinner'closed_at=<Date2021-05-14.14:17:17.921>created_at=<Date2021-05-10.09:41:35.969>labels= ['library', '3.10', '3.11']
title='Remove ParamSpec from __parameters__ of most typing generics'updated_at=<Date2021-07-31.13:36:10.523>user='https://github.com/Fidget-Spinner'
typing.List includes ParamSpec in __parameters__ but the builtin list doesn't. The behavior of the latter is correct, as PEP-612 states that: "As before, parameters_expressions by themselves are not acceptable in places where a type is expected".
This patch just makes the typing version same as the builtin version by excluding ParamSpec from __parameters__ (except for Concatenate, Callable, and Generic).
New changeset c55ff1b by Miss Islington (bot) in branch '3.10': bpo-44098: Drop ParamSpec from most __parameters__ in typing generics (GH-26013) (bpo-26091) c55ff1b
Yeah, but we shouldn't go out of our way to reject it. Especially since in 3.11 we'll likely have something equivalent to PEP-563 or PEP-649 (the SC is thinking deep about this right now) and either of those means that usually it won't be evaluated at all anyway (you'd have to call get_type_hints() with PEP-563, or use __annotations__ with the other).
I am writing a patch which generalizes and significantly simplifies the code for type variables and parameter specifications substitution, and opens a way for more runtime validation. But it is incompatible with these changes.
@serhiy, could you please briefly describe what you are planning? I'm guessing you're generalizing for _TypeVarLike?
My main concern is that we should have as few differences between builtin and typing types as possible. typing.List is deprecated and set to remove in Python 3.13/14, so I'm hoping the transition will be fairly painless.
Originally, the builtin types supported ParamSpec, but I removed that in #69635 for various reasons listed in that PR.
Activity
Fidget-Spinner commentedon May 10, 2021
typing.ListincludesParamSpecin__parameters__but the builtinlistdoesn't. The behavior of the latter is correct, as PEP-612 states that: "As before, parameters_expressions by themselves are not acceptable in places where a type is expected".https://www.python.org/dev/peps/pep-0612/#valid-use-locations
This patch just makes the typing version same as the builtin version by excluding
ParamSpecfrom__parameters__(except for Concatenate, Callable, and Generic).gvanrossum commentedon May 13, 2021
New changeset c55ff1b by Miss Islington (bot) in branch '3.10':
bpo-44098: Drop ParamSpec from most
__parameters__in typing generics (GH-26013) (bpo-26091)c55ff1b
Fidget-Spinner commentedon May 14, 2021
All patches have landed. Thanks Guido!
serhiy-storchaka commentedon Jul 27, 2021
I think that List[P] should be illegal at first place.
gvanrossum commentedon Jul 27, 2021
Yeah, but we shouldn't go out of our way to reject it. Especially since in 3.11 we'll likely have something equivalent to PEP-563 or PEP-649 (the SC is thinking deep about this right now) and either of those means that usually it won't be evaluated at all anyway (you'd have to call get_type_hints() with PEP-563, or use __annotations__ with the other).
serhiy-storchaka commentedon Jul 28, 2021
I am writing a patch which generalizes and significantly simplifies the code for type variables and parameter specifications substitution, and opens a way for more runtime validation. But it is incompatible with these changes.
Fidget-Spinner commentedon Jul 28, 2021
@serhiy, could you please briefly describe what you are planning? I'm guessing you're generalizing for _TypeVarLike?
My main concern is that we should have as few differences between builtin and typing types as possible. typing.List is deprecated and set to remove in Python 3.13/14, so I'm hoping the transition will be fairly painless.
Originally, the builtin types supported ParamSpec, but I removed that in #69635 for various reasons listed in that PR.
serhiy-storchaka commentedon Jul 31, 2021
See bpo-44796.