如何在静态类型检查时运行代码 [重复]

Posted

技术标签:

【中文标题】如何在静态类型检查时运行代码 [重复]【英文标题】:How to run code at static-type checking time [duplicate] 【发布时间】:2020-10-20 11:01:03 【问题描述】:

我希望在解释器检查代码时运行代码(最好是 PyCharm,但与 mypy 相关的答案或其他也可以)。我要运行的代码是更改签名的代码,以便 IDE 更好地显示动态添加的成员或签名。

换句话说,是否有一些保留关键字或__name__ 允许以下内容:

# <code>

if __name__ == 'inspection':
    function.__signature__ = ...

# <code>

编辑:更具体地说,给定一个函数f(a, b),我希望用一个包装函数包装它

def g(*args, **kwargs):
    print(args)
    f(*args, **kwargs)

这样g 在 PyCharm 中将具有相同的签名。 functools.wraps 不起作用。

【问题讨论】:

静态检查的重点是没有代码运行。您能否提供一个如何修补签名的示例?这通常在不执行代码的情况下完全可行。 @MisterMiyagi 感谢您的 cmets(尤其是关于现在已删除的不相关答案)。其目的主要是复制(可能稍作改动)另一个函数的签名。 functools.wraps 不能解决问题(可能是 pyCharm 的问题),所以我正在寻找替代方案。 我取消删除我写的内容和你的答案,以便其他人可以参考。 让我改写一下:请edit 你的问题添加一个minimal reproducible example 你想要实现的目标,以便可以明确地回答问题。你很可能有def a(*args, **kwargs): ...def b(a, b, c, d): ... 之类的东西,并希望ab 一样进行类型检查,对吗? 【参考方案1】:

这个我没查,但是根据PEP484,有一个变量叫typing.TYPE_CHECKING

【讨论】:

typing.TYPE_CHECKING 的要点是在运行时不运行代码。这与在检查期间运行代码无关。

以上是关于如何在静态类型检查时运行代码 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java中静态类型检查是如何进行的

强类型和弱类型,静态类型和动态类型语言如何区分

如何不编译使用 TypeScript

静态代码检查报告

不编译如何使用TypeScript

如何以与静态类型检查兼容的方式实现接口?