首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在Python3.9中嵌套typing.Unions吗?

可以在Python3.9中嵌套typing.Unions吗?
EN

Stack Overflow用户
提问于 2021-05-25 18:15:20
回答 2查看 1.3K关注 0票数 0

是否可以在Python3.9.4中嵌套typing.Union

代码语言:javascript
复制
from typing import Union

TestValue = Union[int, str, float]

TestArray = Union[list, tuple]

TestListA = tuple[str, TestValue]

TestListB = TestArray[str, TestValue, TestValue]

在这段代码中,我在TestListB行中得到了一个异常:

代码语言:javascript
复制
  File "C:\Python39\lib\typing.py", line 268, in inner
    return func(*args, **kwds)
  File "C:\Python39\lib\typing.py", line 751, in __getitem__
    _check_generic(self, params, len(self.__parameters__))
  File "C:\Python39\lib\typing.py", line 202, in _check_generic
    raise TypeError(f"{cls} is not a generic class")
TypeError: typing.Union[list, tuple] is not a generic class

我希望能够指定第一个条目是str的元组或列表,而其他两个条目是strintfloat。我的linter似乎很流行,但是Python本身却没有。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-25 18:40:37

不幸的是,你试图做的是无效的--你不能像你所说的那样“嵌套”工会。这是无效的输入语法。

此外,List类型将只接受一个参数--列表中所有项的类型(对于Sequence类型也是如此):

代码语言:javascript
复制
# This is valid
MyList = List[int]

# This will throw an exception:
MyList = List[int, str, str]

这与Tuple非常不同,您可以在其中定义固定大小的元组中的每个项的类型。因此,将两者交替地混合在一起,或者拥有某种“超级类型”,从Python的角度看没有多大意义。

我不确定类型检查器是否知道如何检查列表中是否有确切的n项。

如果可以的话,我会一直使用元组(甚至命名为元组?)对于这样的代码--有固定数量的项目和特定类型的列表的整个想法有点违背直觉。

否则,TBH --我不确定输入是否有一个好的解决方案--我能想到的最接近的类型是:

代码语言:javascript
复制
ItemType = Union[str, int, float]
SequenceType = Union[List[ItemType], Tuple[str, ItemType, ItemType]]

当然,这将允许用户传递任意长度的列表,其中包含strintfloat的任何混合项--但据我所知,您不能更严格地键入列表(也不应该)。

票数 0
EN

Stack Overflow用户

发布于 2021-05-25 18:30:27

好吧,正如我从您的代码中了解到的,您需要类似于Union[list[str, TestValue, TestValue], tuple[str, TestValue, TestValue]]的东西。但是你实际上是在做一些类似Union[list, tuple][str, TestValue, TestValue]的事情,这是不正确的。也许ListContent = Union[str, TestValue, TestValue]; TestArray = Union[list[ListContent], tuple[ListContent]]是一种解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67693516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档