我正在通过 pyright 使用严格的类型检查。
当我有一个返回 pytorch 的方法时,DataLoader
pyright 会抱怨我的类型定义:
声明的返回类型“DataLoader[Unknown]”部分未知 Pyright (reportUnknownVariableType)
看一下 pytorch 的类型存根DataLoader
(减少到重要部分):
class DataLoader(Generic[T_co]):
dataset: Dataset[T_co]
@overload
def __init__(self, dataset: Dataset[T_co], ...
Run Code Online (Sandbox Code Playgroud)
据我所看到的,通用型T_co
的DataLoader
应该由定义__init__
数据集参数。
Pyright 还抱怨我的Dataset
类型定义:
参数“数据集”的类型部分未知参数类型为“数据集[未知]”Pyright (reportUnknownParameterType)
看一下Dataset
类型存根:
class Dataset(Generic[T_co]):
def __getitem__(self, index: int) -> T_co: ...
Run Code Online (Sandbox Code Playgroud)
向我表明该类型应该由__getitem__
.
我的数据集的类型签名__getitem__
如下所示:
def __getitem__(self, index: int) -> Tuple[Tensor, Tensor]:
Run Code Online (Sandbox Code Playgroud)
基于此,我希望Dataset
并被DataLoader
推断为Dataset[Tuple[Tensor, Tensor]]
,DataLoader[Tuple[Tensor, Tensor]]
但事实并非如此。
我的猜测是 pyright 无法静态推断这里的类型。
我以为我可以像这样定义我自己的类型签名: …