python类型列表的声明

Fin*_*ams 9 python list

假设有一个Bag包含listof的类item。我们所知道的item只是它有一个名为 : 的方法printDescription()

现在我想printAllItemsDescription在内部定义一个方法Bag,该方法调用printDescription()每个item内部项目的方法list

这应该是代码(这是错误的,但我认为应该看起来像这样):

class Bag:
    items:list[item] = []
    .
    . 
    .
    def printAllItemsDescription(this):
        for item in this.items:
            item.printDescription()
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何告诉 python 我items是一个list of item. 我知道我可以做类似的事情item:Item,但不知道如何用列表来做。

然后在迭代时items会知道每个项目都包含一个名为 的方法printDescription(),但此时item只是一个未定义类型的变量。

PS:我也尝试做类似的事情x:list[item],但我得到了这个错误:

Subscript for class "list" will generate runtime exception; enclose type annotation in quotes
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 20

Python 的类型提示在不断发展,并且随着时间的推移做出了一些改变。旧版本的 Python 不支持下标,listlist[item]. 幸运的是,我们可以使用future import来解决所有这些问题。import annotationsfrom__future__适用于从 3.7 开始的所有 Python 版本,并有效地假装所有类型签名都用引号括起来,这样它们就不会在运行时引起问题。

from __future__ import annotations

class Bag:
    items: list[Item]

    def __init__(self):
        self.items = []

    def printAllItemsDescription(self):
        for item in self.items:
            item.printDescription()
Run Code Online (Sandbox Code Playgroud)

另外,我还做了一些小的更改以适应 Python 的风格。实例方法通常应将其第一个参数称为self一致性,并且类(如item)应以大写字母开头,因此如果您可以控制 class item,我建议将其更改为 class Item