2016-01-12 10 views
17

キーが列挙型で、項目が特定のクラスである場合は、OrderedDictを使用します。ヒントcollections.OrderedDictからpython 3.5型入力モジュールを入力する方法

タイピングモジュールを使用してこれをヒントするにはどうすればよいですか?

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

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

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

補遺を持っていない私のような人々のために: はこれまでアナログAChampionによってコメントで述べたように、あなたがMutableMappingを使用することができますnamedtuple ::

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

をしかし、私はどのように、ということをすればOrderedDictをYourDictですか? –

+2

OrderedDictの特定の型が必要な場合は、 'typing.MutableMapping'を使用できます。クラスOrderedDictType(OrderedDict、MutableMapping [KT、VT])を作成する必要があります。 – AChampion

+2

@AChampionあなたはその回答を – Seanny123

答えて

3

をほのめかし何ですか以前は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__ 
+0

にする必要があります。私が実際に気付かないうちに私の指が作り出したものだということが残っています。エラーメッセージは、私のようなものではありませんでした。あなたは好きです。私は基本的な文法ミスをしたことを知る前に、 'abc'の「仮想サブクラス」のウサギの穴を塞いだ。 –

+0

'MutableSequence'から継承することは意味をなしません。この型はシーケンスではなく、マッピングAPIとシーケンスAPIは互換性がありません。 – user2357112

+0

@ user2357112 'OrderedDictionary'の*全体のポイント*は、(通常の' dict'とは異なり)反復順序が保証された順番に反復可能な型になります。これはシーケンスが[abc'によって定義されている](https://docs.python.org/3/glossary.html#term-sequence)です。また、これは、* MutableSequenceから継承しないときに発生するエラーによって確認されることに注意してください。 –

関連する問題