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
为其类型注释编写,但我不明白这意味着什么。
为此,您可以使用 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)
如果您的示例不仅适用于整数列表,而且适用于一般列表,则可以更改为通用类型。
...
是实际的代码。