MyPy 不喜欢将元组分配给变量然后用作类型参数

问题描述 投票:0回答:1

我有一个

list
结构作为 API 的扁平输入

(point_x, point_y, thing_a, thing_b, thing_c)

这个真实的结构是一个由许多扁平对象组成的很长的列表。这个例子是一个非常简化的案例。

我想在 python 中明确创建它的类型

from typing import Tuple

point = (int, int)
thing = (int, float, str)
TypeA = Tuple[point + thing]

这是一个有效的 python 类型:

typing.Tuple[int, int, int, float, str]

但是,MyPy 不喜欢它。

"Invalid type alias: expression is not a valid typeMypyvalid-type"

我拥有的真实结构非常复杂,这对开发人员了解如何创建结构很有帮助。

如何在 MyPy 不导致错误的情况下正确执行此操作


作为附录,以下内容不是有效的解决方案

from typing import Tuple
Tuple[
    int,     # point_x
    int,     # point_y
    int,     # thing_a
    float,   # thing_b
    str      # thing_c
]
python mypy
1个回答
0
投票

您需要使用

tuple[...]
,而不是
(...)
来定义“类型级元组”。

point = tuple[int, int]
thing = tuple[int, float, str]

您可以解压它们来定义

TypeA

TypeA = tuple[*point, *thing]

然后可以用作类型提示:

x: TypeA = (1, 2, 3, 4.5, "foo")  # OK
y: TypeA = ("bar", 2, 3, 4.5, "foo")  # Error
© www.soinside.com 2019 - 2024. All rights reserved.