__getitem__ 返回值的类型注释是什么?

Iny*_*Kim 4 python type-hinting pytorch

我正在通过继承来制作数据集类torch.utils.data.Dataset,并遇到了以下问题。

与以前的函数不同,它返回固定类型的值,__getitem__但不会。例如,

class MyExample:
    def __init__(self, some_list: list[int]):
        self.some_list = some_list

    def __getitem__(self, index):
        return self.some_list[index]
Run Code Online (Sandbox Code Playgroud)

MyExample[<index>]将返回int,同时MyExample[<slice>]将返回slice of int。VScode智能感知自动T_co为其类型注释编写,但我不明白这意味着什么。

  • 我应该如何注释这样的函数?
  • 为了理解这样的注释,我需要学习什么?

Sim*_*awe 7

为此,您可以使用 Unions 作为函数和重载的实际注释,以允许您的类型检查器知道仅在给定切片时才返回切片,而在仅给出 int 时则给出 int。

from typing import overload, Union

class MyExample:
    def __init__(self, some_list: list[int]):
        self.some_list = some_list

    @overload
    def __getitem__(self, index: int) -> int: ...

    @overload
    def __getitem__(self, index: slice) -> list[int]: ...

    def __getitem__(self, index: Union[slice, int]) -> Union[list[int], int]: # Or Slice[int] if that's a thing
        return self.some_list[index]
Run Code Online (Sandbox Code Playgroud)

如果您的示例不仅适用于整数列表,而且适用于一般列表,则可以更改为通用类型。

  • 有关详细信息,请查看过载文档
  • ...是实际的代码。