bpo-41810: Reintroduce `types.EllipsisType`, `.NoneType` & `.NotImplementedType` (GH-22336)

closes issue 41810
This commit is contained in:
Bas van Beek 2020-09-22 17:55:34 +02:00 committed by GitHub
parent a68a2ad19c
commit 0d0e9fe2ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 54 additions and 5 deletions

View File

@ -19,19 +19,21 @@ A small number of constants live in the built-in namespace. They are:
.. data:: None .. data:: None
The sole value of the type ``NoneType``. ``None`` is frequently used to An object frequently used to represent the absence of a value, as when
represent the absence of a value, as when default arguments are not passed to a default arguments are not passed to a function. Assignments to ``None``
function. Assignments to ``None`` are illegal and raise a :exc:`SyntaxError`. are illegal and raise a :exc:`SyntaxError`.
``None`` is the sole instance of the :data:`NoneType` type.
.. data:: NotImplemented .. 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__`, (e.g. :meth:`__eq__`, :meth:`__lt__`, :meth:`__add__`, :meth:`__rsub__`,
etc.) to indicate that the operation is not implemented with respect to 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 the other type; may be returned by the in-place binary special methods
(e.g. :meth:`__imul__`, :meth:`__iand__`, etc.) for the same purpose. (e.g. :meth:`__imul__`, :meth:`__iand__`, etc.) for the same purpose.
It should not be evaluated in a boolean context. It should not be evaluated in a boolean context.
``NotImplemented`` is the sole instance of the :data:`types.NotImplementedType` type.
.. note:: .. note::
@ -59,8 +61,9 @@ A small number of constants live in the built-in namespace. They are:
.. index:: single: ...; ellipsis literal .. index:: single: ...; ellipsis literal
.. data:: Ellipsis .. 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. with extended slicing syntax for user-defined container data types.
``Ellipsis`` is the sole instance of the :data:`types.EllipsisType` type.
.. data:: __debug__ .. data:: __debug__

View File

@ -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: Standard names are defined for the following types:
.. data:: NoneType
The type of :data:`None`.
.. versionadded:: 3.10
.. data:: FunctionType .. data:: FunctionType
LambdaType LambdaType
@ -186,6 +193,13 @@ Standard names are defined for the following types:
.. versionadded:: 3.7 .. versionadded:: 3.7
.. data:: NotImplementedType
The type of :data:`NotImplemented`.
.. versionadded:: 3.10
.. data:: MethodDescriptorType .. data:: MethodDescriptorType
The type of methods of some built-in data types such as :meth:`str.join`. 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. 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) .. class:: TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
The type of traceback objects such as found in ``sys.exc_info()[2]``. The type of traceback objects such as found in ``sys.exc_info()[2]``.

View File

@ -145,6 +145,14 @@ Add :data:`sys.orig_argv` attribute: the list of the original command line
arguments passed to the Python executable. arguments passed to the Python executable.
(Contributed by Victor Stinner in :issue:`23427`.) (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 unittest
-------- --------

View File

@ -713,6 +713,16 @@ class TypesTests(unittest.TestCase):
assert repr(int | None) == "int | None" assert repr(int | None) == "int | None"
assert repr(int | typing.GenericAlias(list, int)) == "int | list[int]" 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): class MappingProxyTests(unittest.TestCase):
mappingproxy = types.MappingProxyType mappingproxy = types.MappingProxyType

View File

@ -296,5 +296,8 @@ def coroutine(func):
GenericAlias = type(list[int]) GenericAlias = type(list[int])
Union = type(int | str) Union = type(int | str)
EllipsisType = type(Ellipsis)
NoneType = type(None)
NotImplementedType = type(NotImplemented)
__all__ = [n for n in globals() if n[:1] != '_'] __all__ = [n for n in globals() if n[:1] != '_']

View File

@ -134,6 +134,7 @@ Robin Becker
Torsten Becker Torsten Becker
Bill Bedford Bill Bedford
Michał Bednarski Michał Bednarski
Bas van Beek
Ian Beer Ian Beer
Stefan Behnel Stefan Behnel
Reimer Behrends Reimer Behrends

View File

@ -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.