summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/typing.rst4
-rw-r--r--Lib/test/test_typing.py11
-rw-r--r--Lib/typing.py10
3 files changed, 25 insertions, 0 deletions
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index 2bac6f8..fd6bded 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -563,6 +563,10 @@ The module defines the following classes, functions and decorators:
As a shorthand for this type, :class:`bytes` can be used to
annotate arguments of any of the types mentioned above.
+.. class:: Deque(deque, MutableSequence[T])
+
+ A generic version of :class:`collections.deque`.
+
.. class:: List(list, MutableSequence[T])
Generic version of :class:`list`.
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index d203ce3..7585412 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -1572,6 +1572,9 @@ class CollectionsAbcTests(BaseTestCase):
def test_list(self):
self.assertIsSubclass(list, typing.List)
+ def test_deque(self):
+ self.assertIsSubclass(collections.deque, typing.Deque)
+
def test_set(self):
self.assertIsSubclass(set, typing.Set)
self.assertNotIsSubclass(frozenset, typing.Set)
@@ -1642,6 +1645,14 @@ class CollectionsAbcTests(BaseTestCase):
self.assertIsSubclass(MyDefDict, collections.defaultdict)
self.assertNotIsSubclass(collections.defaultdict, MyDefDict)
+ def test_no_deque_instantiation(self):
+ with self.assertRaises(TypeError):
+ typing.Deque()
+ with self.assertRaises(TypeError):
+ typing.Deque[T]()
+ with self.assertRaises(TypeError):
+ typing.Deque[int]()
+
def test_no_set_instantiation(self):
with self.assertRaises(TypeError):
typing.Set()
diff --git a/Lib/typing.py b/Lib/typing.py
index 34845b7..2821c3c 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -59,6 +59,7 @@ __all__ = [
'SupportsRound',
# Concrete collection types.
+ 'Deque',
'Dict',
'DefaultDict',
'List',
@@ -1771,6 +1772,15 @@ class List(list, MutableSequence[T], extra=list):
"use list() instead")
return _generic_new(list, cls, *args, **kwds)
+class Deque(collections.deque, MutableSequence[T], extra=collections.deque):
+
+ __slots__ = ()
+
+ def __new__(cls, *args, **kwds):
+ if _geqv(cls, Deque):
+ raise TypeError("Type Deque cannot be instantiated; "
+ "use deque() instead")
+ return _generic_new(collections.deque, cls, *args, **kwds)
class Set(set, MutableSet[T], extra=set):