序列(例如列表)的方法__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问题?
谢谢!
答案 0 :(得分:2)
__getitem__()
的正确类型提示为Union[Product, Sequence[Product, None, None]]
。
在文档中似乎记录的唯一地方是data model page,其中指出:“当用作表达式时,切片是相同类型的序列”。 注意:类似类型的序列(例如List)也应该,请参阅typing。
进一步讨论:在迭代时使用带序列的切片时,我期待生成器,因为它们的内存效率更高。但现在很明显,这会导致不断发生:l_2 = list(l_1[2:])
,这会很烦人。