python 3의 새로운 유형 주석 기능과 generics 지원을 활용하여 Python으로 Abstract Generic Base 클래스를 만들려고합니다.Python TypeError : 'Generic'객체는 subscriptable이 아닙니다 - 일반 기본 클래스를 선언하고 인스턴스화하는 방법
나는 기본 클래스와 같은 정의 된 파생 클래스가 있습니다
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
내가 가진 하위 클래스를 선언 할 때 또는 하위 클래스를 인스턴스화 할 때 제네릭 매개 변수에 대한 값을 지정하는 등 많은 다른 작업을 시도했으며 모두 동일한 오류 메시지가 발생했습니다. 핵심 라이브러리에는 제네릭 형식의 많은 예제가 올바르게 작동하므로 이러한 오류가 발생하는 이유에 대해 혼란 스럽습니다.
대괄호 수정 외에도'__metaclass__ = ABCMeta'를 설정하면 안됩니다. 3) Python 3에서 메타 클래스를 지정하는 문법을 변경했기 때문에 2) 추상 메소드가 없다. 3) 클래스가 'Generic [_T]의'typing.GenericMeta' 메타 클래스를 상속합니다. ]'. – user2357112
나는 추상적 인 방법을 가지고있다. 나는 그들이 문제에 영향을 미치지 않았기 때문에 간략하게 생략했다. Generic 클래스가 ABC라는 것을 알았 기 때문에 제가 필요로하는지 궁금해서 제가 제거 할 것입니다. – Simon