Объект 'ABCMeta' не может быть подписан при попытке аннотировать переменную ha sh - PullRequest
0 голосов
/ 28 января 2020

Следующее 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 выше?

1 Ответ

4 голосов
/ 28 января 2020

Вы должны использовать typing.Mapping вместо collections.abc.Mapping. typing содержит множество обобщенных c версий различных типов, которые предназначены для использования в подсказках типов. Согласно документации mypy , между классами typing и классами collections.abc есть некоторые различия, но неясно, в чем именно заключаются эти различия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...