函数间的类型推断/重用类型提示

2 投票
1 回答
71 浏览
提问于 2025-04-12 20:44

我在一个外部库里有一个函数,它的类型提示很复杂(我们叫它“内函数”)。在我的代码中,还有另一个函数(我们叫它“外函数”)在调用这个内函数。这个内函数的一个参数需要从外函数传递过去。我希望使用mypy来检查这个参数的类型,但又不想去复制那个复杂的类型提示。

这里有一个简单的例子

def inner(x: int) -> None:
    ...

def outer(x, y: str) -> None:
    """function that needs a typehint for x"""
    inner(x)

# This should throw an error
outer(x="a", y="a")

所以我想找到一种方法,定义一个类型别名,这个别名基于内函数的一个参数的类型(我不能修改这个内函数),而不需要复制类型提示(这样如果内函数的类型提示改变,我也不用去更新它)。

1 个回答

0

你可以用 TypeAlias 来给一个变量指定类型,然后在两个函数中重复使用这个类型:

from typing import TypeAlias

X: TypeAlias = int
def inner(x: X) -> None:
    ...

def outer(x: X, y: str) -> None:
    """function that needs a typehint for x"""
    inner(x)

# This should throw an error
outer(x="a", y="a")

补充说明:抱歉,我刚刚注意到有评论提到这是一个外部库——你可以通过一种叫做“猴子补丁”的方法,把这个别名作为一个单独的变量暴露出来。

撰写回答