__getitem__() 的正确类型提示

问题描述 投票:0回答:1

序列(例如列表)的方法

__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 问题?

谢谢!

python pycharm python-typing
1个回答
3
投票

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

文档中似乎记录的唯一位置是在数据模型页面上,其中指出:“当用作表达式时,切片是相同类型的序列”。 注意:类似序列的类型(例如 List)也应该可以工作,请参阅打字

进一步讨论:在迭代时使用带有序列的切片时,我期待生成器,因为它们的内存效率更高。但现在对我来说很明显,这会导致必须不断地做:

l_2 = list(l_1[2:])
,这会很烦人。

© www.soinside.com 2019 - 2024. All rights reserved.