首页 > 解决方案 > 元组的类型提示,如果参数的数量可以是 2 或 3

问题描述

我想问一下,在我的情况下,如何正确编写 * args变量的类型提示。

我有这个方法:

def insert(self, *args) -> None:

* args格式为Union[Tuple[My_Class, str, ?], Iterable[Tuple[My_class, str, ?]]],其中第三个参数可能是也可能不是必须给出。它标有问号。

我用这个语句调用这个方法:

form.insert(
            (first_field, "John", "Doe"),
            (date_field, "12251996"),
)

总之 * args可以是 Tuple,里面有 2 或 3 个值,其中第三个参数是 str,或者没有给这个方法
,或者它可以是 Tuple 的 Iterable,其中 Tuple 具有与前一种情况相同的值。

A 尝试了这些类型提示,但它没有给我我需要的东西。

Union[Tuple[My_Class, str, Optional[str]], Iterable[Tuple[My_class, str, Optional[str]]]]
Union[Tuple[My_Class, str, ...], Iterable[Tuple[My_class, str, ...]]]
Union[Tuple[My_Class, str, Union[str, ...]], Iterable[Tuple[My_class, str, Union[str, ...]]]]

有没有人有任何想法,请问如何解决这个问题?

标签: pythontuplestype-hintingmypypython-typing

解决方案


将这两个版本添加到您的Union

def insert(self, *args: Union[
    Tuple[X, str, str],
    Tuple[X, str],
    Iterable[Union[Tuple[X, str, str], Tuple[X, str]]]
]) -> None:

尽管该类型别名的大小表明该方法做得太多


推荐阅读