如何在Mypy类型注释中指定OrderedDict的K和V类型?

8 浏览
0 Comments

如何在Mypy类型注释中指定OrderedDict的K和V类型?

我正在使用Python 3.5和Mypy为我的脚本进行基本的静态检查。最近,我重构了一些方法,使其返回OrderedDict,但是当我尝试在返回注释中指定Key和Value类型时,遇到了"'type' object is not subscriptable"错误。

简化的示例代码:

#!/usr/bin/env python3.5
from collections import OrderedDict
# 这段代码是可以工作的
def foo() -> OrderedDict:
    result = OrderedDict() # type: OrderedDict[str, int]
    result['foo'] = 123
    return result
# 这段代码是不可以工作的
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,它还会发出警告。

是什么原因导致了这个问题?

0