【发布时间】:2021-12-25 04:38:38
【问题描述】:
为了减少我的导入次数,我试图在一个专用模块中绑定一些打字别名,例如colour.utilities.hints.
在该模块中,出于兼容性原因并且因为我仍在运行 Python 3.7,我尝试将 typing_extensions.Literal 绑定到新的 Literal 属性:
color/utilities/hints.py
import typing_extensions
Literal = typing_extensions.Literal
然后我使用bound属性如下:
color/utilities/array.py
from typing import Optional, Union
from colour.utilities.hints import ArrayLike, NDArray, Literal
# ...
def orient(a: ArrayLike,
orientation: Literal['Flip', 'Flop', '90 CW', '90 CCW', '180']
) -> Union[NDArray, None]:
orientation = validate_method(orientation,
['Flip', 'Flop', '90 CW', '90 CCW', '180'])
if orientation == 'flip':
return np.fliplr(a)
elif orientation == 'flop':
return np.flipud(a)
elif orientation == '90 cw':
return np.rot90(a, 3)
elif orientation == '90 ccw':
return np.rot90(a)
elif orientation == '180':
return np.rot90(a, 2)
else:
return None
当我输入检查模块时:
colour/utilities/array.py:1077: error: Variable "colour.utilities.hints.Literal" is not valid as a type
colour/utilities/array.py:1077: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
colour/utilities/array.py:1077: error: Name "Flip" is not defined
colour/utilities/array.py:1077: error: Name "Flop" is not defined
colour/utilities/array.py:1077: error: Invalid type comment or annotation
在colour/utilities/array.py 中导入typing_extensions.Literal 并直接使用它就可以了。
【问题讨论】: