bpo-41810: Reintroduce `types.EllipsisType`, `.NoneType` & `.NotImplementedType` (GH-22336)
closes issue 41810
This commit is contained in:
parent
a68a2ad19c
commit
0d0e9fe2ff
|
@ -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::
|
||||
|
||||
|
@ -61,6 +63,7 @@ A small number of constants live in the built-in namespace. They are:
|
|||
|
||||
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__
|
||||
|
|
|
@ -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]``.
|
||||
|
|
|
@ -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
|
||||
--------
|
||||
|
||||
|
|
|
@ -713,6 +713,16 @@ class TypesTests(unittest.TestCase):
|
|||
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
|
||||
|
||||
|
|
|
@ -296,5 +296,8 @@ def coroutine(func):
|
|||
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] != '_']
|
||||
|
|
|
@ -134,6 +134,7 @@ Robin Becker
|
|||
Torsten Becker
|
||||
Bill Bedford
|
||||
Michał Bednarski
|
||||
Bas van Beek
|
||||
Ian Beer
|
||||
Stefan Behnel
|
||||
Reimer Behrends
|
||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue