声明自定义类的列表作为Python 3.6中函数的参数

时间:2019-06-20 12:31:32

标签: python python-3.x

我想在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才能执行,但这并不是我想要的。有什么想法吗?谢谢。

3 个答案:

答案 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作为类型注释。您的代码应该在编写时就可以正常工作。