[Python-checkins] bpo-41810: Reintroduce `types.EllipsisType`, `.NoneType` & `.NotImplementedType` (GH-22336)
Bas van Beek
webhook-mailer at python.org
Tue Sep 22 11:55:38 EDT 2020
https://github.com/python/cpython/commit/0d0e9fe2ffc1683758a1985ef6dedeef5ecafdbc
commit: 0d0e9fe2ffc1683758a1985ef6dedeef5ecafdbc
branch: master
author: Bas van Beek <43369155+BvB93 at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-09-22T08:55:34-07:00
summary:
bpo-41810: Reintroduce `types.EllipsisType`, `.NoneType` & `.NotImplementedType` (GH-22336)
closes issue 41810
files:
A Misc/NEWS.d/next/Library/2020-09-20-15-14-05.bpo-41810.7l8lyV.rst
M Doc/library/constants.rst
M Doc/library/types.rst
M Doc/whatsnew/3.10.rst
M Lib/test/test_types.py
M Lib/types.py
M Misc/ACKS
diff --git a/Doc/library/constants.rst b/Doc/library/constants.rst
index f17e1a3787516..38dd552a0363a 100644
--- a/Doc/library/constants.rst
+++ b/Doc/library/constants.rst
@@ -19,19 +19,21 @@ A small number of constants live in the built-in namespace. They are:
.. data:: None
- The sole value of the type ``NoneType``. ``None`` is frequently used to
- represent the absence of a value, as when default arguments are not passed to a
- function. Assignments to ``None`` are illegal and raise a :exc:`SyntaxError`.
+ An object frequently used to represent the absence of a value, as when
+ default arguments are not passed to a function. Assignments to ``None``
+ are illegal and raise a :exc:`SyntaxError`.
+ ``None`` is the sole instance of the :data:`NoneType` type.
.. data:: NotImplemented
- Special value which should be returned by the binary special methods
+ A special value which should be returned by the binary special methods
(e.g. :meth:`__eq__`, :meth:`__lt__`, :meth:`__add__`, :meth:`__rsub__`,
etc.) to indicate that the operation is not implemented with respect to
the other type; may be returned by the in-place binary special methods
(e.g. :meth:`__imul__`, :meth:`__iand__`, etc.) for the same purpose.
It should not be evaluated in a boolean context.
+ ``NotImplemented`` is the sole instance of the :data:`types.NotImplementedType` type.
.. note::
@@ -59,8 +61,9 @@ A small number of constants live in the built-in namespace. They are:
.. index:: single: ...; ellipsis literal
.. data:: Ellipsis
- The same as the ellipsis literal "``...``". Special value used mostly in conjunction
+ The same as the ellipsis literal "``...``". Special value used mostly in conjunction
with extended slicing syntax for user-defined container data types.
+ ``Ellipsis`` is the sole instance of the :data:`types.EllipsisType` type.
.. data:: __debug__
diff --git a/Doc/library/types.rst b/Doc/library/types.rst
index 79acdf4499afd..25fa750f2ccac 100644
--- a/Doc/library/types.rst
+++ b/Doc/library/types.rst
@@ -103,6 +103,13 @@ If you instantiate any of these types, note that signatures may vary between Pyt
Standard names are defined for the following types:
+.. data:: NoneType
+
+ The type of :data:`None`.
+
+ .. versionadded:: 3.10
+
+
.. data:: FunctionType
LambdaType
@@ -186,6 +193,13 @@ Standard names are defined for the following types:
.. versionadded:: 3.7
+.. data:: NotImplementedType
+
+ The type of :data:`NotImplemented`.
+
+ .. versionadded:: 3.10
+
+
.. data:: MethodDescriptorType
The type of methods of some built-in data types such as :meth:`str.join`.
@@ -236,6 +250,13 @@ Standard names are defined for the following types:
Defaults to ``None``. Previously the attribute was optional.
+.. data:: EllipsisType
+
+ The type of :data:`Ellipsis`.
+
+ .. versionadded:: 3.10
+
+
.. class:: TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
The type of traceback objects such as found in ``sys.exc_info()[2]``.
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index ce888fec1d8c9..f88281a934ca1 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -145,6 +145,14 @@ Add :data:`sys.orig_argv` attribute: the list of the original command line
arguments passed to the Python executable.
(Contributed by Victor Stinner in :issue:`23427`.)
+types
+-----
+
+Reintroduced the :data:`types.EllipsisType`, :data:`types.NoneType`
+and :data:`types.NotImplementedType` classes, providing a new set
+of types readily interpretable by type checkers.
+(Contributed by Bas van Beek in :issue:`41810`.)
+
unittest
--------
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index f499fb9c8c51a..52a59d54f044d 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -713,6 +713,16 @@ def test_or_type_repr(self):
assert repr(int | None) == "int | None"
assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]"
+ def test_ellipsis_type(self):
+ self.assertIsInstance(Ellipsis, types.EllipsisType)
+
+ def test_notimplemented_type(self):
+ self.assertIsInstance(NotImplemented, types.NotImplementedType)
+
+ def test_none_type(self):
+ self.assertIsInstance(None, types.NoneType)
+
+
class MappingProxyTests(unittest.TestCase):
mappingproxy = types.MappingProxyType
diff --git a/Lib/types.py b/Lib/types.py
index 9642e7212caac..532f4806fc022 100644
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -296,5 +296,8 @@ def wrapped(*args, **kwargs):
GenericAlias = type(list[int])
Union = type(int | str)
+EllipsisType = type(Ellipsis)
+NoneType = type(None)
+NotImplementedType = type(NotImplemented)
__all__ = [n for n in globals() if n[:1] != '_']
diff --git a/Misc/ACKS b/Misc/ACKS
index e4bd3da6b6c40..7b743464c1c1c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -134,6 +134,7 @@ Robin Becker
Torsten Becker
Bill Bedford
Michał Bednarski
+Bas van Beek
Ian Beer
Stefan Behnel
Reimer Behrends
diff --git a/Misc/NEWS.d/next/Library/2020-09-20-15-14-05.bpo-41810.7l8lyV.rst b/Misc/NEWS.d/next/Library/2020-09-20-15-14-05.bpo-41810.7l8lyV.rst
new file mode 100644
index 0000000000000..515aea9e36ce9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-09-20-15-14-05.bpo-41810.7l8lyV.rst
@@ -0,0 +1,3 @@
+:data:`types.EllipsisType`, :data:`types.NotImplementedType` and
+:data:`types.NoneType` have been reintroduced, providing a new set
+of types readily interpretable by static type checkers.
More information about the Python-checkins
mailing list