【发布时间】:2021-04-22 06:04:17
【问题描述】:
尝试构建一个xarrayDataset,我们在其中构建参数“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 吗?在任何情况下,Tuples 和 bools 不是 Any 类型吗?我对此处的 mypy 和/或 Python 类型提示有什么不明白的地方?
【问题讨论】:
-
非常感谢!我看错了地方-这里的问题是(从您的评论中了解到)
str不被视为Hashable.. 或者一般来说,Mappings 中的键不是协变的,另请参阅@987654323 @ -
我的理解是
str是Hashable,但由于dict是可变数据类型,因此您必须为键传递完全相同的类型,不是子类型。被调用的函数可能会在传递的参数中添加另一个Hashable键,从而破坏源代码。 -
是的,感谢您澄清这一点,我没有正确表达。
标签: python-3.x mypy python-typing