The following 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
is used as a base class for:
@dataclass(eq=True, frozen=True)
class HashLiteral(Expression):
    pairs: Mapping[Expression, Expression]
    ...
Node is defined as:
@dataclass(eq=True, frozen=True)
class Node:
    def __str__(self) -> str:
        raise NotImplementedError
When trying to use the HashLiteral class I get the error:
pairs: Mapping[Expression, Expression]
TypeError: 'ABCMeta' object is not subscriptable
What is wrong with my annotation of pairs above?
You should use typing.Mapping instead of collections.abc.Mapping.  typing contains many generic versions of various types, which are designed to be used in type hints.  According to the mypy documentation, there are some differences between the typing classes and the collections.abc classes, but they're unclear on exactly what those differences are.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With