如何为 Sequence[T] 提供泛型类型参数?

How to provide generic type parameter to Sequence[T]?

我正在尝试创建一个列表,用于在 Python 中存储类型为 T 的元素,但是,我不知道如何为此类列表的实例指定具体类型。

对于非列表实例,实现非常清楚:

from typing import TypeVar, Generic

T = TypeVar("T")


class MyGenericType(Generic[T]):
    def __init__(self):
        self.value: T = None


generic_instance: MyGenericType[int] = MyGenericType()

最后一行按预期工作:它生成 intT 个实例,然后我可以在其中存储这些值。

对于列表,我这样写:

from typing import TypeVar, Sequence

T = TypeVar("T")


class MyGenericList(Sequence[T]):
    def __init__(self):
        self.store: Sequence[T] = []

    # abstract method implementations cut for brevity


generic_list: MyGenericList[int] = MyGenericList()

最后一行应该创建一个存储 int 元素的列表,但是我的 IDE (PyCharm) 在第一个左方括号周围抱怨:

Class 'ABCMeta' 没有定义'__getitem__',所以不能在它的实例上使用'[]'运算符

显然它试图通过索引运算符访问列表元素,但是,我想在这个地方指定通用类型。这是不可能的还是我做错了什么?

难道这只是一个 PyCharm 错误?这听起来确实类似于 ,但我已经 运行 IDE 的 2017.1.4 版本,问题中提到的错误仅影响 return 上的提示类型(似乎)。

看来我也必须从 Generic[T] 继承列表。我不确定为什么,我认为 Sequence[T] 已经为我做到了。也许有人可以解释一下这方面的背景。

class MyGenericList(Generic[T], Sequence[T]):
    def __init__(self):
        self.store: Sequence[T] = []

根据关于泛型如何工作的原始说明,这似乎是 PyCharm 的错误,并且不需要从 Generic[T] 进行额外的推导...