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 一样,您在括号中指定其类型参数。
我正在尝试利用 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 一样,您在括号中指定其类型参数。