mypy: Signature of “__getitem__” incompatible with

2019-06-27 05:31发布

I have a class that inherits from MutableSequence like this:

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

mypy complains that Signature of "__getitem__" incompatible with supertype "Sequence".

In Sequence, this method is defined as:

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

So, what's the problem and why mypy isn't happy with my implementation?

1条回答
该账号已被封号
2楼-- · 2019-06-27 06:14

As mentioned in comments, a typeof slice can also be passed. Ie, change idx: int to idx: Union[int, slice].

This will make mypy happy (at least on my machine ;):

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

    def __getitem__(self, idx: Union[int, slice]) -> 'QqTag':
        return self._children[idx]
查看更多
登录 后发表回答