我有一堆执行功能的类,但是通过类型提示,我现在想让它显示该类的实例或该类的实例列表。
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
答案 0 :(得分:1)
基于对python文档的研究,答案如下。
列表是可以实现的。这是一个数据结构。
列表是一种键入,用于类型提示。它不是数据结构。
对于熟悉其他类型语言的人来说,我的错误是我误以为List也作为具有类似list实现的备用数据结构。
这意味着您可以拥有一个功能:
get_all() -> List[Foo]: pass
由于上述原因,返回类型不能为列表。
它仍然是一个列表,因为这是实际的数据结构。它仅用于装饰目的。我在概念上遇到了这样的问题,即我试图通过将示例中显示的东西作为一个List来强制执行打字,但是由于它不可实例化,所以这一切都是有道理的。
因此,您很容易拥有
def get_all() -> List[Foo]: return []
返回一个列表。我在想提示和返回应该是同一类型。