类型提示一个变量与Python中的另一个变量具有相同的类型

2024-06-09 20:00:26 发布

您现在位置:Python中文网/ 问答频道 /正文

示例:

def f(...): ...
v: type(f) = decorate(f)

但是VSCode的Python语言服务器似乎无法识别它(MyPy给了它object类型?)。你知道吗

这里的部分问题是decorate不是手动键入的,并且推断不正确。你知道吗


Tags: 服务器语言示例类型键入objectdeftype
1条回答
网友
1楼 · 发布于 2024-06-09 20:00:26

类型表达式由类型检查器静态计算。*像type(f)这样的复杂表达式不能保证工作,因为type(f)的计算结果是f运行时类型,而不是它的静态注释值。**类型检查器不知道该运行时类型是什么。一般来说,您应该坚持使用PEP 484中描述的类型表达式以获得最大的兼容性。你知道吗

Part of the problem here is that decorate is not manually typed and is improperly inferred.

那就修好它。例如,您可以说它返回的对象与其参数的类型相同:

T = typing.TypeVar('T')
d = typing.cast(typing.Callable[[T], T], decorate)
v = d(f) # v is inferred to have the same type as f

*类型表达式也会在运行时进行计算,存储在__annotations__字段中,然后再也不会使用,除非某些代码决定对它们进行内省。此运行时功能很少使用,与问题无关。
**事实上,这比这更糟糕,因为有人可能用一个定制的type()修补了您的模块,它的功能与内置的完全不同。你知道吗

相关问题 更多 >