gpt4 book ai didi

python - 对变量进行类型提示,使其与 Python 中的另一个变量具有相同的类型

转载 作者:行者123 更新时间:2023-11-30 21:59:21 25 4
gpt4 key购买 nike

示例:

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

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

这里的部分问题是 decorate 不是手动输入的,并且推断不正确。

最佳答案

类型表达式由类型检查器静态计算。* 复杂的表达式(例如 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__ 字段中,然后永远不会再次使用,除非某些代码决定内省(introspection)它们。此运行时功能很少使用,并且与问题无关。
** 事实上,情况比这更糟糕,因为有人可能使用自定义 type() 对您的模块进行了猴子修补,该自定义 type() 的功能与内置模块完全不同。

关于python - 对变量进行类型提示,使其与 Python 中的另一个变量具有相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com