how to type hint collections.OrderedDict via python 3.5 typing module
As noted in a comment by AChampion, you can use MutableMapping
:
class Actor(Enum):
# ...Actor enum menbers...
class Location:
# ...Location class body...
class MapActor2Location(OrderedDict, MutableMapping[Actor, Location]):
pass
Addendum for people like me who haven't used the typing
module before: note that the type definitions use indexing syntax ([T]
) without parentheses. I initially tried something like this:
class MyMap(OrderedDict, MutableMapping([KT, VT])): pass
(Note the extraneous parentheses around [KT, VT]
!)
This gives what I consider a rather confusing error:
TypeError: Can't instantiate abstract class MutableMapping with abstract methods __delitem__, __getitem__, __iter__, __len__, __setitem__
The question is about 3.5, but typing.OrderedDict
was introduced in the python 3.7.2. So you can write:
from typing import OrderedDict
Movie = OrderedDict[Actor, Location]
or with backward compatibility workaround suggested by AChampion
try:
from typing import OrderedDict
except ImportError:
from typing import MutableMapping
OrderedDict = MutableMapping
Movie = OrderedDict[Actor, Location]