Tim*_*son 19 python typing python-3.5
我想使用一个OrderedDict,其中键是一个枚举,并且该项是某个类.
我如何使用输入模块来暗示这一点?什么是这个暗示的namedtuple ::
Move = typing.NamedTuple('Move', [('actor', Actor), ('location', Location)])
Run Code Online (Sandbox Code Playgroud)
问题是关于 3.5,但在 python 3.7.2 中typing.OrderedDict被引入。所以你可以写:
from typing import OrderedDict
Movie = OrderedDict[Actor, Location]
Run Code Online (Sandbox Code Playgroud)
或使用 AChampion 建议的向后兼容解决方法
try:
from typing import OrderedDict
except ImportError:
from typing import MutableMapping
OrderedDict = MutableMapping
Movie = OrderedDict[Actor, Location]
Run Code Online (Sandbox Code Playgroud)
正如 AChampion 在评论中指出的那样,您可以使用MutableMapping:
class Actor(Enum):
# ...Actor enum menbers...
class Location:
# ...Location class body...
class MapActor2Location(OrderedDict, MutableMapping[Actor, Location]):
pass
Run Code Online (Sandbox Code Playgroud)
像我这样以前没有使用过该typing模块的人的附录:请注意,类型定义使用不带括号的索引语法 ( [T]) 。我最初尝试过这样的事情:
class MyMap(OrderedDict, MutableMapping([KT, VT])): pass
Run Code Online (Sandbox Code Playgroud)
(注意周围多余的括号[KT, VT]!)
这给出了我认为相当令人困惑的错误:
TypeError: Can't instantiate abstract class MutableMapping with abstract methods __delitem__, __getitem__, __iter__, __len__, __setitem__
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |