Как ввести аннотацию, используя любой тип в качестве ключа в словаре Python?Python

Программы на Python
Anonymous
Как ввести аннотацию, используя любой тип в качестве ключа в словаре Python?

Сообщение Anonymous »

В Python типы — это объекты первого класса. Таким образом, я могу создать словарь с типами в качестве ключей. Например:

Код: Выделить всё

mydict = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
Предполагая, что мой словарь будет заполнен произвольными типами в качестве ключей, как мне ввести аннотацию?
Я пробовал:

Код: Выделить всё

mydict: dict[type, Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
и:

Код: Выделить всё

mydict: dict[Type[Any], Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
и даже:

Код: Выделить всё

mydict: dict[Any, Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
Но mypy жалуется на назначение всех этих элементов. Как правильно ввести аннотацию словаря, который принимает любой тип в качестве ключа?
Если бы у меня были только определенные типы, такие как int и str, я мог бы вероятно, аннотируйте его как dict[Union[Type[int], Type[str]]], Any], но поскольку я хочу поддерживать ключи типа любой, это просто не подходит это.
Без аннотации типа синтаксис работает нормально, и я даже могу получить определенные значения из словаря. Например:

Код: Выделить всё

mydict = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}

print(mydict[int])
...и он успешно печатает Hello!
Если это имеет значение, я использую Python 3.9.6 и mypy 0,812.

Подробнее здесь: https://stackoverflow.com/questions/686 ... dictionary

Вернуться в «Python»