Как указать типы OrderedDict K, V для аннотации типа Mypy?Python

Программы на Python
Anonymous
Как указать типы OrderedDict K, V для аннотации типа Mypy?

Сообщение Anonymous »

Я использую Python 3.5 вместе с Mypy, чтобы выполнить базовую статическую проверку моего скрипта. Недавно я реорганизовал некоторые методы для возврата OrderedDict, но столкнулся с ошибкой «Объект типа не подлежит индексированию», когда пытался использовать аннотацию возврата с указанными типами ключа и значения.
Сокращенный пример :

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

#!/usr/bin/env python3.5

from collections import OrderedDict

# this works
def foo() -> OrderedDict:
result = OrderedDict() # type: OrderedDict[str, int]
result['foo'] = 123
return result

# this doesn't
def foo2() -> OrderedDict[str, int]:
result = OrderedDict() # type: OrderedDict[str, int]
result['foo'] = 123
return result

print(foo())
А это вывод Python при его запуске:

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

Traceback (most recent call last):
File "./foo.py", line 12, in 
def foo2() -> OrderedDict[str, int]:
TypeError: 'type' object is not subscriptable
Однако Mypy не имеет проблем с аннотацией типа в комментарии и фактически предупредит, если я попытаюсь выполнить result[123] = 123.
Что является причиной этого?

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

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