2017-10-11 5 views
1

私はこのようなMutableSequenceから継承するクラスを持っている:mypy: "__getitem__" スーパータイプと互換性がない "シーケンス" の署名

class QqTag(MutableSequence): 
    def __init__(self): 
     self._children = [] 
    def __getitem__(self, idx: int) -> 'QqTag': 
     return self._children[idx] 

mypyはそのSignature of "__getitem__" incompatible with supertype "Sequence"を文句を言います。 Sequence

、このメソッドは次のように定義されます

@abstractmethod 
def __getitem__(self, index): 
    raise IndexError 

だから、問題は、なぜmypyは私の実装に満足していない何ですか?

+0

だけの推測 - しかし、あなたは、型注釈を削除するとどうなりますか...? –

+0

@JonClements:ただしこれを指定することは可能です。 –

+0

@Martijn yeah ...型の注釈をチェックして、それがベースから制限されていると思っていると、野生の推測でした。結局、 'idx'は' int'などである必要はありません。 –

答えて

0

コメントに記載されているように、スライスのタイプも渡すことができます。

これはmypy幸せになります(少なくとも私のマシン上で;):

class QqTag(MutableSequence): 
    def __init__(self): 
     self._children = [] 

    def __getitem__(self, idx: Union[int, slice]) -> 'QqTag': 
     return self._children[idx] 
関連する問題