想象一下,我有如下一组功能。 foo
有许多各种类型的参数,bar
将其所有参数传递给其他函数。有什么方法可以使mypy理解bar
与foo
具有相同的类型,而无需显式复制整个参数列表?
def foo(a: int, b: float, c: str, d: bool, *e: str, f: str = "a", g: str = "b") -> str:
...
def bar(*args, **kwargs):
val = foo(*args, **kwargs)
...
return val
关于添加此功能here的讨论很多。对于传递所有参数的简单案例,您可以使用this comment:
中的配方F = TypeVar('F', bound=Callable[..., Any])
class copy_signature(Generic[F]):
def __init__(self, target: F) -> None: ...
def __call__(self, wrapped: Callable[..., Any]) -> F: ...
def f(x: bool, *extra: int) -> str: ...
@copy_signature(f)
def test(*args, **kwargs):
return f(*args, **kwargs)
reveal_type(test) # Revealed type is 'def (x: bool, *extra: int) -> str'