gpt4 book ai didi

python - 在其他模块中时,类型别名中的 mypy 类前向引用会出错

转载 作者:行者123 更新时间:2023-12-05 01:09:19 25 4
gpt4 key购买 nike

我想将我的类型别名保留在一个模块中,比如 my_types,以便能够在我的应用程序中的任何地方使用它们(类似于标准的 typing 模块)。但是 mypy 提示没有定义对类 X 的前向引用。如果我稍后在同一个模块中定义类 X,没关系,但如果它定义了在另一场比赛中,mypy 感到不安。

所以我的问题是,如何将所有类型别名保存在一个模块中没有 mypy 产生关于未定义的前向引用的错误同一个模块?或者这是一种错误的方法?

这是我的示例代码:

from my_types import SomeXs

class X:
pass

类型别名的定义如下:

# my_types.py
from typing import List

SomeXs = List['X']

当我运行 mypy 时,我收到一个错误,即 X 未定义:

$ mypy module.py
my_types.py:4: error: Name 'X' is not defined
Found 1 error in 1 file (checked 1 source file)

最佳答案

我将分享我在 mypy 文档 common issues section 中找到的解决方案这里:mypy 必须能够访问 X 的定义。为了避免导入周期,mypy文档推荐了一个技巧 - 只导入定义类型检查时会创建循环导入。它是这样的:

from typing import List, TYPE_CHECKING

if TYPE_CHECKING:
from main import X

SomeXs = List['X']

这使得 Python 解释器在执行时忽略导入这段代码,但 mypy 仍然使用 main 中的 X 的定义。

等等:

$ mypy *.py
Success: no issues found in 2 source files

关于python - 在其他模块中时,类型别名中的 mypy 类前向引用会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65252463/

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