适当的__getitem __()类型提示

时间:2017-11-08 21:44:21

标签: python pycharm typing

序列(例如列表)的方法__getitem__()可以返回单个项目或一系列项目。例如,给定下面的功能装饰:

def __getitem__(self, index) -> Union[Product, Generator[Product, None, None]]:
    return super(Products, self).__getitem__(index)

使用示例:

i1 = 34
for product in products[i1:]:
    print(product.name)

我相信Union[Product, Generator[Product, None, None]]是正确的,但PyCharm认为这是不正确的。我是否误用了打字库,或者这是一个PyCharm问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

__getitem__()的正确类型提示为Union[Product, Sequence[Product, None, None]]

在文档中似乎记录的唯一地方是data model page,其中指出:“当用作表达式时,切片是相同类型的序列”。 注意:类似类型的序列(例如List)也应该,请参阅typing

进一步讨论:在迭代时使用带序列的切片时,我期待生成器,因为它们的内存效率更高。但现在很明显,这会导致不断发生:l_2 = list(l_1[2:]),这会很烦人。