Python 3.10+typingпонятие
typing.ParamSpec
обобщения и параметры
Переменная-спецификация параметров: захватывает сигнатуру вызова (позиционные и именованные) для типизации декораторов/обёрток (Python 3.10+).
Синтаксис
P = typing.ParamSpec('P')
Нужен, когда пишешь декоратор-обёртку и хочешь сохранить исходную сигнатуру: без ParamSpec обёртку типизируют как Callable[..., T] и теряют параметры, из-за чего проверяльщик перестаёт ловить неправильные вызовы. Работает в паре с Callable и Concatenate; доступен с Python 3.10 (раньше — через typing_extensions).
Примеры
from typing import ParamSpec
P = ParamSpec('P')
print(P.__name__) # → P
print(P.args) # → P.args
print(P.kwargs) # → P.kwargs
def wrapper(*args: P.args, **kwargs: P.kwargs) -> None: pass
print(wrapper.__annotations__['args']) # → P.args
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности