如何使用“类型提示”显示List <Foo>

时间:2019-09-17 16:09:14

标签: python-3.x

我有一堆执行功能的类,但是通过类型提示,我现在想让它显示该类的实例或该类的实例列表。

class Foo:
  pass
class Bar:
  pass
class Win:
  pass

然后我开始看打字,并且正在做类似的事情:

get_all_foos() -> list:
  return []

这很有意义,但我希望它更详细。类似于:

get_all_foos() -> list<Foo>:
  return []

我正在网上寻找,似乎我可能需要使用LIST类型而不是基本的 list

from typing import List
get_all_foo() -> List[Foo]:
  pass

虽然我不认为自己遇到任何错误,但我想确保这是按照Python标准执行操作的正确方法,或者是否适合执行以下操作:

get_all_foo() -> list[Foo]:
  pass

1 个答案:

答案 0 :(得分:1)

基于对python文档的研究,答案如下。

列表是可以实现的。这是一个数据结构。

列表是一种键入,用于类型提示。它不是数据结构。

对于熟悉其他类型语言的人来说,我的错误是我误以为List也作为具有类似list实现的备用数据结构。

这意味着您可以拥有一个功能:

get_all() -> List[Foo]: pass

由于上述原因,返回类型不能为列表。

它仍然是一个列表,因为这是实际的数据结构。它仅用于装饰目的。我在概念上遇到了这样的问题,即我试图通过将示例中显示的东西作为一个List来强制执行打字,但是由于它不可实例化,所以这一切都是有道理的。

因此,您很容易拥有

def get_all() -> List[Foo]: return [] 

返回一个列表。我在想提示和返回应该是同一类型。