嵌套类型规范中的 TypeVar

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

假设我有一个用

TypeVar
定义的类型,如下所示:

T = TypeVar('T')
MyType = Union[list[T], tuple[T]]


def func(a: MyType[int]):
    pass

我也想要它的可选版本:

MyTypeOpt = Optional[MyType]

def opt_func(a: MyTypeOpt[int] = None):
    pass

但这不符合 mypy 的喜好,我收到错误:

Bad number of arguments for type alias, expected: 0, given: 1  [type-arg]

有没有办法让它工作而不需要每次都写

Optional[MyType[...]]

python mypy python-typing
1个回答
3
投票

我认为您缺少泛型类型的类型参数

MyType
。 mypy 也在抱怨这一点。

from typing import Optional, Sequence, Tuple, Union

from typing_extensions import TypeVar

T = TypeVar('T')
MyType = Union[Sequence[T], Tuple[T]]
MyTypeOpt = Optional[MyType[T]]  # <---------


def func(a: MyType[int]) -> None:
    pass


def opt_func(a: MyTypeOpt[int] = None) -> None:
    pass


def opt_func2(a: Optional[MyType[int]] = None) -> None:
    pass
© www.soinside.com 2019 - 2024. All rights reserved.