Python · Avançado · Inglês · Técnico
ParamSpec
Variável de tipo do módulo typing que captura a lista de parâmetros de um chamável. Permite tipar decoradores que preservam a assinatura da função decorada.
Onde usar
Aparece em decorators de retry, cache e logging em bases tipadas. Em code review, sem ParamSpec o mypy perde a assinatura e trata o resultado como um chamável genérico.
Em código
from typing import Callable as C
from typing import ParamSpec, TypeVar
P = ParamSpec('P')
R = TypeVar('R')
def deco(f: C[P, R]) -> C[P, R]:
def w(*a: P.args, **k: P.kwargs) -> R:
return f(*a, **k)
return wExemplos
Use ParamSpec so the decorator keeps the signature.
Use ParamSpec para o decorator manter a assinatura.
Without ParamSpec, mypy loses the arguments of the function.
Sem ParamSpec, o mypy perde os argumentos da função.
Cuidado
Não confunda com TypeVar, que captura um tipo; o ParamSpec captura parâmetros inteiros, usando P.args e P.kwargs.