一天结束的时候,你需要以一种或另一种形式对Mypy撒谎——问题的归根结底就是这样做的符合人体工程学和方便的方式是什么。
这样做最方便的方法可能是在单独的文件中定义额外的文件,并将它们全局导入到脚本中。你可以利用
typing.TYPE_CHECKING
variable——该变量在运行时始终为false,但在类型检查时被视为true。所以,你可能会这样做:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from my_ironpython_globals import *
不过,最好确保没有人在运行时尝试使用自定义模块中的任何内容。确保这一点的一种方法是在
stub file
--存根文件是python的类似于typescript的定义文件。
简而言之,创建以
.pyi
扩展(而不是
.py
)在你的项目中定义所有的东西。
如果您想查看存根文件的示例,请尝试签出
typeshed
,标准库和一些流行的第三方库的存根存储库。(Mypy收到一份打字稿)。他们
contribution guidelines
如果你对这类东西感兴趣的话,有一个风格指南。
如果要将新创建的存根作为第三方模块分发,只需pip安装和使用,请创建一个
PEP 561-compliant package
包含类型提示。
您可以采用的另一种方法是使用自己的自定义类型化版本。也就是说,克隆或分叉
排版
并修改
stdlib/*/builtins.pyi
文件,以便它们包含特定于Ironpython的全局变量。
然后,使用
--custom-typeshed-dir
标志:例如Do
mypy --custom-typeshed-dir path/to/my/typeshed mycode
。
如果键入此标志序列变得单调乏味,请创建一个
configuration file
在那里编码你的设置。
这种方法比第一种方法更具原则性,因为你教mypy合法地识别任何可用的全局变量。但是,必须维护自己的typeshed叉+跟上上游的变化
是
很多工作(这种碎片化可能不理想)。
因此,如果您确实决定采用这种方法,那么首先应该讨论一下typeshed的问题跟踪程序。排版(以及PEP484生态系统)总体上还是相当新的,所以仍然有空间影响它的生长方向。