[Python-checkins] [3.9] bpo-42675: Document collections.abc.Callable changes (GH-23839) (#23852)

gvanrossum webhook-mailer at python.org
Sat Dec 19 17:32:15 EST 2020

commit: 597ebc8cf604de49eabbc7b83be2debd005d7819
branch: 3.9
author: kj <28750310+Fidget-Spinner at users.noreply.github.com>
committer: gvanrossum <gvanrossum at gmail.com>
date: 2020-12-19T14:32:06-08:00

[3.9] bpo-42675: Document collections.abc.Callable changes (GH-23839) (#23852)

M Doc/library/types.rst
M Doc/whatsnew/3.9.rst

diff --git a/Doc/library/types.rst b/Doc/library/types.rst
index 0fe3822fa542e..d83d9667ba3a7 100644
--- a/Doc/library/types.rst
+++ b/Doc/library/types.rst
@@ -260,6 +260,9 @@ Standard names are defined for the following types:
    .. versionadded:: 3.9
+   .. versionchanged:: 3.9.2
+      This type can now be subclassed.
 .. class:: TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index f8f421bdda1c7..68b1e504da89e 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -1497,3 +1497,22 @@ functions and options conditionally available based on the operating system
 version in use at runtime ("weaklinking").
 (Contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`.)
+Notable changes in Python 3.9.2
+:class:`collections.abc.Callable` generic now flattens type parameters, similar
+to what :data:`typing.Callable` currently does.  This means that
+``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of
+``(int, str, str)``; previously this was ``([int, str], str)``.  To allow this
+change, :class:`types.GenericAlias` can now be subclassed, and a subclass will
+be returned when subscripting the :class:`collections.abc.Callable` type.
+Code which accesses the arguments via :func:`typing.get_args` or ``__args__``
+need to account for this change.  A :exc:`DeprecationWarning` may be emitted for
+invalid forms of parameterizing :class:`collections.abc.Callable` which may have
+passed silently in Python 3.9.1.  This :exc:`DeprecationWarning` will
+become a :exc:`TypeError` in Python 3.10.
+(Contributed by Ken Jin in :issue:`42195`.)

More information about the Python-checkins mailing list