我正在尝试定义一个可以容纳对象容器的函数,并且我不在乎容器是元组还是列表。
(我知道我可能会遇到实施this的麻烦,但我不想这样做,而且我仍然不确定是否能解决我的问题。)
所以,我有以下代码:
from typing import Any, Union, List, Tuple
# (list or tuple) of Any
AnyBucket = Union[List[Any], Tuple[Any, ...]]
# should be (list or tuple) of (lists or tuples) of Any
AnyBuckets = Union[List[AnyBucket], Tuple[AnyBucket, ...]]
def takes_any_buckets(inpt: AnyBuckets) -> None:
print(inpt[0][0])
input_value: List[List[Any]] = [[1], [2]]
# Argument 1 to "takes_any_buckets" has incompatible type "List[List[Any]]";
# expected "Union[List[Union[List[Any], Tuple[Any, ...]]], Tuple[Union[List[Any], Tuple[Any, ...]], ...]]"
takes_any_buckets(input_value)
我有两个问题:
(我不想只禁用# type: ignore
的错误,我想定义一个可以使用的类型。)
我对(1)的猜测是,它与List
是invariant有关,但是由于这个复杂的示例,我不知道如何做。
除了可能实现前面提到的麻烦之外,我对(2)没有任何想法,这会使我摆脱Union
,我怀疑这可能是问题的一部分。