Make deque inherit from MutableMapping (with difficulty). Fixes #43.

This commit is contained in:
Guido van Rossum
2016-01-14 09:14:38 -08:00
parent 71d15d6943
commit 5463335be2
2 changed files with 26 additions and 5 deletions

View File

@@ -18,6 +18,7 @@ from typing import (
from typing import (
MutableMapping as MutableMapping,
Sequence as Sequence,
MutableSequence as MutableSequence,
AbstractSet as Set,
)
@@ -30,17 +31,20 @@ _VT = TypeVar('_VT')
namedtuple = object()
class deque(Sized, Iterable[_T], Generic[_T]):
# Technically, deque only derives from MutableSequence in 3.5.
# But in practice it's not worth losing sleep over.
class deque(MutableSequence[_T], Generic[_T]):
maxlen = 0 # type: Optional[int] # TODO readonly
def __init__(self, iterable: Iterable[_T] = ...,
maxlen: int = ...) -> None: ...
def append(self, x: _T) -> None: ...
def appendleft(self, x: _T) -> None: ...
def insert(self, i: int, x: _T) -> None: ...
def clear(self) -> None: ...
def count(self, x: _T) -> int: ...
def extend(self, iterable: Iterable[_T]) -> None: ...
def extendleft(self, iterable: Iterable[_T]) -> None: ...
def pop(self) -> _T: ...
def pop(self, i: int = ...) -> _T: ...
def popleft(self) -> _T: ...
def remove(self, value: _T) -> None: ...
def reverse(self) -> None: ...
@@ -51,9 +55,22 @@ class deque(Sized, Iterable[_T], Generic[_T]):
def __str__(self) -> str: ...
def __hash__(self) -> int: ...
def __getitem__(self, i: int) -> _T: ...
# These methods of deque don't really take slices, but we need to
# define them as taking a slice to satisfy MutableSequence.
@overload
def __getitem__(self, index: int) -> _T: ...
@overload
def __getitem__(self, s: slice) -> Sequence[_T]: raise TypeError
@overload
def __setitem__(self, i: int, x: _T) -> None: ...
def __contains__(self, o: _T) -> bool: ...
@overload
def __setitem__(self, s: slice, o: Sequence[_T]) -> None: raise TypeError
@overload
def __delitem__(self, i: int) -> None: ...
@overload
def __delitem__(self, s: slice) -> None: raise TypeError
def __contains__(self, o: object) -> bool: ...
# TODO __reversed__

View File

@@ -150,8 +150,12 @@ class MutableSequence(Sequence[_T], Generic[_T]):
@overload
@abstractmethod
def __setitem__(self, s: slice, o: Sequence[_T]) -> None: ...
@overload
@abstractmethod
def __delitem__(self, i: Union[int, slice]) -> None: ...
def __delitem__(self, i: int) -> None: ...
@overload
@abstractmethod
def __delitem__(self, i: slice) -> None: ...
# Mixin methods
def append(self, object: _T) -> None: ...
def extend(self, iterable: Iterable[_T]) -> None: ...