从其他函数复制类型签名

问题描述 投票:0回答:1

想象一下,我有如下一组功能。 foo有许多各种类型的参数,bar将其所有参数传递给其他函数。有什么方法可以使mypy理解barfoo具有相同的类型,而无需显式复制整个参数列表?

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
python mypy python-typing
1个回答
0
投票

关于添加此功能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'
© www.soinside.com 2019 - 2024. All rights reserved.