Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过python 3.5键入模块键入hint collections.OrderedDict_Python_Python 3.5_Typing - Fatal编程技术网

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

如何通过python 3.5键入模块键入hint collections.OrderedDict,python,python-3.5,typing,Python,Python 3.5,Typing,我想使用OrderedDict,其中键是枚举,项是某个类 如何使用输入模块来提示这一点? 与这个暗示的命名元组有什么相似之处:: Move = typing.NamedTuple('Move', [('actor', Actor), ('location', Location)]) 正如AChampion在评论中指出的,您可以使用MutableMapping: class Actor(Enum): # ...Actor enum menbers... class Location:

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

如何使用输入模块来提示这一点? 与这个暗示的命名元组有什么相似之处::

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

像我这样以前没有使用过
键入
模块的人的补充:请注意,类型定义使用索引语法(
[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__

问题是关于3.5,但是
键入.OrderedDict
是。所以你可以写:

从输入导入订单信息开始
电影=订购的电影[演员、地点]
或者使用AChampion建议的向后兼容性解决方案

试试看:
从输入import OrderedDict
除恐怖外:
从键入import MutableMapping
OrderedDict=可变映射
电影=订购的电影[演员、地点]

但是如果我这样做了,你如何定义一个OrderedDict?你可以使用
键入.MutableMapping
,如果你需要OrderedDict的特定类型,你必须创建它
类OrderedDictType(OrderedDict,MutableMapping[KT,VT])
,用于附录,我意识到没有充分的理由解释为什么括号在我放的地方会有任何意义,但事实是,我的手指在我没有注意到的情况下就产生了括号,错误信息并没有我希望的那么有用。在我发现自己犯了一个基本的语法错误之前,我已经进入了abc的“虚拟子类”的兔子洞。从
MutableSequence
继承没有意义,因为这种类型不是序列,映射和序列API不兼容。@user2357112一个
OrderedDictionary
的整个点是一个有保证的迭代顺序的序列iterable类型(不同于普通的
dict
)。这是一个怎样的序列。再次请注意,当您不是从
MutableSequence
@user2357112继承时发生的错误证实了这一点。我对答案进行了编辑,以解释为什么需要
MutableSequence
。序列是通过顺序整数索引访问的。保证的迭代顺序只是序列API的一部分。除了ImportError之外,
如何:从按顺序键入import MutableMapping dict
?@connectyourcharger
MutableMapping
已在3.6.0中引入,如果将
MutableMapping
更改为
Any
,则可以将向后兼容性恢复到3.5,在3.7.2中有适当的类型检查,在3.5中有“工作代码”+