python - 尝试注释哈希变量时,“ABCMeta”对象不可下标

标签 python python-3.x annotations

以下dataclass :

from abc import ABC
from collections.abc import Mapping
from dataclasses import dataclass, field

@dataclass(eq=True, order=True, frozen=True)
class Expression(Node, ABC):
    def node(self):
        raise NotImplementedError

用作基类:
@dataclass(eq=True, frozen=True)
class HashLiteral(Expression):
    pairs: Mapping[Expression, Expression]
    ...
Node定义为:
@dataclass(eq=True, frozen=True)
class Node:
    def __str__(self) -> str:
        raise NotImplementedError

尝试使用 HashLiteral 时类我收到错误:
pairs: Mapping[Expression, Expression]
TypeError: 'ABCMeta' object is not subscriptable

我的 pairs 注释有什么问题以上?

最佳答案

您应该使用 typing.Mapping而不是 collections.abc.Mapping . typing包含各种类型的许多通用版本,旨在用于类型提示。根据 mypy documentation , typing 之间存在一些差异类和 collections.abc类,但他们不清楚这些差异到底是什么。

关于python - 尝试注释哈希变量时,“ABCMeta”对象不可下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59955751/

相关文章:

python - 如何替换对象特征内数字之间的文本

Python:嵌套字典重复值

PYTHONHASHSEED 值

python - 相当于 Lua 的 pairs() 用于 Python

python - 如何在OpenCV中将视频写入内存

java - 如何在java中使用注释相关参数检查自定义运行时异常属性

java - 使用注解强制方法实现

python - Django Rest Framework 序列化程序 `source` 给出了奇怪的必需错误

python - 如何在Python中设置一个计时器来验证用户名?

php - Symfony 将参数传递给验证器约束