如何让 Mypy 将冻结的数据类识别为 Hashable

How to make Mypy recognize frozen dataclasses as Hashable

因此,使用 frozen=True 创建有效的可哈希数据classes 很棒,但它破坏了我对编写的代码进行类型检查的一些能力,因为 mypy 似乎无法自动识别冻结数据classes 作为 Hashable 的实例。这当然是有道理的,因为我没有明确地扩展 class(如果它可以推断,那将是惊人的),但是有没有人为这个问题找到一个优雅的 solution/workaround?

更深入地看,我的问题实际上是由于使用此类数据类列表而导致的方差问题。有支持,请注意差异:)

在我的案例中,在我的类型注释中使用 Sequence[Hashable] 而不是 List[Hashable] 安抚了 mypy。事实证明,由于列表元素是可变的,因此它们是不变的,而序列是协变的。参见 https://mypy.readthedocs.io/en/stable/common_issues.html#invariance-vs-covariance