如何在静态类型检查时运行代码 [重复]
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): ...
之类的东西,并希望a
像b
一样进行类型检查,对吗?
【参考方案1】:
这个我没查,但是根据PEP484,有一个变量叫typing.TYPE_CHECKING
。
【讨论】:
typing.TYPE_CHECKING
的要点是在运行时不运行代码。这与在检查期间运行代码无关。以上是关于如何在静态类型检查时运行代码 [重复]的主要内容,如果未能解决你的问题,请参考以下文章