如何将typing_extensions.Literal绑定到其他模块实现跨模块导入
问题原因
该报错的核心原因是mypy默认会将colour.utilities.hints模块中赋值的Literal识别为普通变量,而非可用于注解的类型别名,因此不允许将其用作类型构造器。后续的Name "Flip" is not defined等报错属于连锁问题,只要修复了Literal的类型识别问题就会自动消失。
解决方案
有两种常用的修复方式,选择其中一种即可:
方案1:显式标注为类型别名
在Python 3.7环境下,你可以借助typing_extensions.TypeAlias显式告诉mypy这是一个类型别名,修改colour/utilities/hints.py代码如下:
import typing_extensions from typing_extensions import TypeAlias Literal: TypeAlias = typing_extensions.Literal # 其余要导出的ArrayLike、NDArray等类型别名也可以用同样方式标注
方案2:直接重导出导入的类型
不用手动赋值绑定,直接用导入语法重导出Literal,mypy原生支持识别这种导出的类型,修改colour/utilities/hints.py代码如下:
from typing_extensions import Literal # 这里放其他要导出的类型的导入/定义逻辑,比如ArrayLike、NDArray的相关代码 # 可选:添加__all__明确导出列表,避免导出冗余内容 __all__ = ["ArrayLike", "NDArray", "Literal"]
修改完成后重新执行类型检查,报错就会消失,也不需要改动array.py里的导入和使用逻辑。
内容的提问来源于stack exchange,提问作者Kel Solaar
相关产品推荐
相关产品推荐

