元组的类型提示,如果参数的数量可以是 2 或 3

Type hint for Tuple, if the number of arguments can be 2 or 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,或者不给这个方法
或者它可以是可迭代的元组,其中元组具有与前一种情况相同的值。

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, ...]]]]

有没有人知道如何解决这个问题?

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

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

虽然该类型别名的大小表明该方法做的太多了