我想在Python 3中键入类方法的输入。我希望参数是我创建的自定义类的list
。
该方法的定义如下:
def add_report_data(self, report_data: list[ReportData]):
pass
ReportData
是一个常规类,定义如下:
class ReportData:
def __init__(self, system: str, value: int):
self.__system = system
self.__value = value
执行我的代码时,出现以下错误:
def add_report_data(self, report_data: list[ReportData]):
TypeError: 'type' object is not subscriptable
但是,可以将report_data
的类型更改为简单的list
才能执行,但这并不是我想要的。有什么想法吗?谢谢。
答案 0 :(得分:4)
您要导入typing.List并执行List[ReportData]
List[ReportData]
是指用于键入的list
的通用版本,而不是list[ReportData]
,后者是指数据类型list
#Importing List from typing
from typing import List
class ReportData:
def __init__(self, system: str, value: int):
self.__system = system
self.__value = value
class A:
#Using List[ReportData]
def add_report_data(self, report_data: List[ReportData]):
pass
答案 1 :(得分:0)
正如Devesh回答的那样,您的问题是,实际上您没有使用类型为report_data
的{{1}}输入list
参数,而是尝试从{{ 1}}位于索引ReportData
上,这将给您带来错误,因为list
不是有效的索引。
尝试键入类型为ReportData
的{{1}}时,应使用ReportData
并传递元素类型。
答案 2 :(得分:0)
在Python 3.9+和Python 3.7+上,如果您这样做
from __future__ import annotations
您可以使用list
作为类型注释。您的代码应该在编写时就可以正常工作。