2017-10-11 2 views
1

J'ai une classe qui hérite de MutableSequence comme ceci:mypy: Signature de "__getitem__" incompatible avec supertype "séquence"

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

mypy se plaint que Signature of "__getitem__" incompatible with supertype "Sequence".

En Sequence, cette méthode est définie comme:

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

Alors, quel est le problème et pourquoi mypy est pas content de ma mise en œuvre?

+0

Juste une supposition - mais ce qui se passe si vous supprimez l'annotation de type ...? –

+0

@JonClements: cela devrait être possible de spécifier, cependant. –

+0

@Martijn ouais ... était juste une conjecture sauvage que si elle vérifie l'annotation de type et gémit qu'elle pense qu'elle est restrictive de la base - après tout, le 'idx 'n'a pas besoin d'être un' int' etc ... –

Répondre

0

Comme mentionné dans les commentaires, une tranche de typeof peut également être passée.

Cela rendra mypy heureux (au moins sur ma machine;):

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

    def __getitem__(self, idx: Union[int, slice]) -> 'QqTag': 
     return self._children[idx]