`TypeVar`:参数类型作为`bound`参数的值

时间:2017-07-14 12:58:15

标签: python generics typing mypy

我想实现这样的通用类:

S = TypeVar("S")
T = TypeVar("T", bound=OtherParametrizedClass)

class MyClass(Generic[T[S]]):
    def some_method(param: S) -> None:
        pass

我已经尝试了以下内容:

S = TypeVar("S")
T = TypeVar("T", bound=OtherParametrizedClass)

class MyClass(Generic[S, T[S]]):
    def some_method(param: S) -> None:
        pass
    def other_method(param: T) -> None:
        pass

它与MyPy一样正常工作。但是,当Python解释器运行此代码时,它会给我以下错误:

TypeError: 'TypeVar' object is not subscriptable.

正如我发现的那样,这意味着TypeVar没有实施[]运算符。

有没有人知道如何获得满足mypy和Python解释器的解决方案?

编辑: 我也尝试过以下方法:

S = TypeVar("S")
T = TypeVar("T", bound=OtherParametrizedClass[S])

class MyClass(Generic[T]):
    def some_method(param: S) -> None:
        pass
    def other_method(param: T) -> None:
        pass

Python解释器不会提供任何错误/警告。然而,mypy抱怨第二行:

Invalid type "S"

0 个答案:

没有答案