xarray
Dataset
,我们在将输入传递给构造函数之前构建参数“coords”和“attrs”的输入:
coordinates = {"time": ("time", time_coordinates)}
attributes = {"some_flag": False}
...
ds = xr.Dataset(data_vars=variables, coords=coordinates, attrs=attributes)
令我困惑的是针对此代码运行
mypy
的输出:
error: Argument "coords" to "Dataset" has incompatible type "Dict[str, Tuple[str, Any]]"; expected "Optional[Mapping[Hashable, Any]]"
error: Argument "attrs" to "Dataset" has incompatible type "Dict[str, bool]"; expected "Optional[Mapping[Hashable, Any]]"
dict
不是Mapping
吗? str
不也是Hashable
吗?无论如何, Tuple
和 bool
不都是 Any
类型吗?关于 mypy 和/或 Python 类型提示,我不明白什么?
使用来自Selcuk的信息,我发现了这个有点冗长的解决方案,如mypy文档中详述:由于
Mapping
的键是不变的,需要明确暗示str
有类型Hashable
。 (虽然字符串是 Hashable
的子类型,但 Mapping
的键不是协变的,因此不允许子类型。)。或者,正如Selcuk在他的评论中所说:
isstr
,但由于Hashable
是可变数据类型,因此您必须为键传递完全相同的类型,而不是子类型。被调用的函数可能会向传递的参数添加另一个dict
键,从而破坏源代码。Hashable
coordinates: Dict[Hashable, Tuple[str, Any]] = {
"time": ("time", time_coordinates)
}
attributes: Dict[Hashable, Any] = {"some_flag": False}