如何通过python 3.5键入模块键入提示collections.OrderedDict


问题内容

我想使用OrderedDict,其中键是枚举,而项目是特定类。

如何使用打字模块提示这一点?这个提示的namedtuple类似什么:

Move = typing.NamedTuple('Move', [('actor', Actor), ('location', Location)])

问题答案:

如AChampion的评论中所述,您可以使用MutableMapping

class Actor(Enum):
    # ...Actor enum menbers...

class Location:
    # ...Location class body...

class MapActor2Location(OrderedDict, MutableMapping[Actor, Location]):
    pass

对于像我这样以前从未使用过该typing模块的人的附录:请注意,类型定义使用 不带 括号的索引语法([T])。我最初尝试过这样的事情:


class MyMap(OrderedDict, MutableMapping([KT, VT])): pass

(请注意周围的多余括号[KT, VT]!)

这给了我一个相当混乱的错误:

TypeError: Can't instantiate abstract class MutableMapping with abstract methods __delitem__, __getitem__, __iter__, __len__, __setitem__