diff --git a/python2/test_typing.py b/python2/test_typing.py index e709ffb08..6e1feb996 100644 --- a/python2/test_typing.py +++ b/python2/test_typing.py @@ -527,7 +527,7 @@ def test_reversible(self): def test_protocol_instance_type_error(self): with self.assertRaises(TypeError): - isinstance([], typing.Reversible) + isinstance(0, typing.SupportsAbs) class GenericTests(TestCase): diff --git a/python2/typing.py b/python2/typing.py index d219aebd6..04521205c 100644 --- a/python2/typing.py +++ b/python2/typing.py @@ -1363,12 +1363,17 @@ def __abs__(self): pass -class Reversible(_Protocol[T_co]): - __slots__ = () +if hasattr(collections_abc, 'Reversible'): + class Reversible(Iterable[T_co]): + __slots__ = () + __extra__ = collections_abc.Reversible +else: + class Reversible(_Protocol[T_co]): + __slots__ = () - @abstractmethod - def __reversed__(self): - pass + @abstractmethod + def __reversed__(self): + pass Sized = collections_abc.Sized # Not generic. @@ -1399,8 +1404,12 @@ class MutableMapping(Mapping[KT, VT]): __extra__ = collections_abc.MutableMapping -class Sequence(Sized, Iterable[T_co], Container[T_co]): - __extra__ = collections_abc.Sequence +if hasattr(collections_abc, 'Reversible'): + class Sequence(Sized, Reversible[T_co], Container[T_co]): + __extra__ = collections_abc.Sequence +else: + class Sequence(Sized, Iterable[T_co], Container[T_co]): + __extra__ = collections_abc.Sequence class MutableSequence(Sequence[T]): diff --git a/src/test_typing.py b/src/test_typing.py index 0f40b93a2..fdee131c2 100644 --- a/src/test_typing.py +++ b/src/test_typing.py @@ -550,7 +550,7 @@ def test_reversible(self): def test_protocol_instance_type_error(self): with self.assertRaises(TypeError): - isinstance([], typing.Reversible) + isinstance(0, typing.SupportsAbs) class GenericTests(TestCase): diff --git a/src/typing.py b/src/typing.py index a1469ff03..93934f23d 100644 --- a/src/typing.py +++ b/src/typing.py @@ -1378,12 +1378,16 @@ def __round__(self, ndigits: int = 0) -> T_co: pass -class Reversible(_Protocol[T_co]): - __slots__ = () +if hasattr(collections_abc, 'Reversible'): + class Reversible(Iterable[T_co], extra=collections_abc.Reversible): + __slots__ = () +else: + class Reversible(_Protocol[T_co]): + __slots__ = () - @abstractmethod - def __reversed__(self) -> 'Iterator[T_co]': - pass + @abstractmethod + def __reversed__(self) -> 'Iterator[T_co]': + pass Sized = collections_abc.Sized # Not generic. @@ -1414,10 +1418,14 @@ class Mapping(Sized, Iterable[KT], Container[KT], Generic[VT_co], class MutableMapping(Mapping[KT, VT], extra=collections_abc.MutableMapping): pass - -class Sequence(Sized, Iterable[T_co], Container[T_co], +if hasattr(collections_abc, 'Reversible'): + class Sequence(Sized, Reversible[T_co], Container[T_co], extra=collections_abc.Sequence): - pass + pass +else: + class Sequence(Sized, Iterable[T_co], Container[T_co], + extra=collections_abc.Sequence): + pass class MutableSequence(Sequence[T], extra=collections_abc.MutableSequence):