如何通过 python 3.5 打字模块输入提示集合.OrderedDict

问题描述 投票:0回答:2

我想使用 OrderedDict,其中键是枚举,项目是某个类。

如何使用输入模块来提示这一点? 这个暗示的命名元组的模拟是什么::

Move = typing.NamedTuple('Move', [('actor', Actor), ('location', Location)])
python python-typing
2个回答
6
投票

正如 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__

6
投票

问题是关于3.5的,但是

typing.OrderedDict
是在python 3.7.2中引入的。所以你可以写:

from typing import OrderedDict Movie = OrderedDict[Actor, Location]

或采用 AChampion 建议的向后兼容性解决方法

try: from typing import OrderedDict except ImportError: from typing import MutableMapping OrderedDict = MutableMapping Movie = OrderedDict[Actor, Location]
    
© www.soinside.com 2019 - 2024. All rights reserved.