Python TypeError: 'Generic' object is not subscriptable - How to Declare and Instantiate a Generic Base Class

Python TypeError: 'Generic' object is not subscriptable - How to Declare and Instantiate a Generic Base Class

我正在尝试利用 python 3 中的新类型注释功能和对泛型的支持,在 python 中创建抽象通用基础 class。

我有一个基础 class 和一个派生的 class 定义如下:

from abc import ABCMeta, abstractmethod
from typing import TypeVar, Generic, Iterator, List, Dict, Optional

_T = TypeVar('_T')

class FileReader(Generic(_T)):
    __metaclass__ = ABCMeta
    def __init__(self, filename: str, verbose: bool = False):
        pass

_X = TypeVar('_X')

class EmploymentHistoryFileReader(FileReader[_X]):
    def __init__(self, filename: str, verbose: bool = False):
        FileReader.__init__(filename=filename, verbose=verbose)

当我尝试实例化 EmploymentHistoryFileReader[EmploymentHistoryFileRow] 类型的对象时,我得到:

File "/Users/simon.hughes/GitHub/analytics-py-careerpathing/careerpathing/data/employment_history_file_reader.py", line 38, in <module>
class EmploymentHistoryFileReader(FileReader[_X]):
TypeError: 'Generic' object is not subscriptable

我尝试了很多不同的方法,例如在声明子 class 或实例化子时指定泛型参数的值 class,它们的结果都是一样的错误信息。核心库有很多泛型类型正确工作的例子,所以我很困惑为什么会出现这些错误。

这一行:

class FileReader(Generic(_T)):

应该为 Generic[_T] 使用括号:

class FileReader(Generic[_T]):

Generic 是通用的,与任何其他通用 ABC 一样,您在括号中指定其类型参数。