假设有一个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 不支持下标,list如list[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。