Python Glossary English

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Сообщить о неточности