[Python-checkins] bpo-25988: Do not expose abstract collection classes in the collections module. (GH-10596)

Serhiy Storchaka webhook-mailer at python.org
Mon Oct 7 05:10:22 EDT 2019


https://github.com/python/cpython/commit/ef092fe9905f61ca27889092ca1248a11aa74498
commit: ef092fe9905f61ca27889092ca1248a11aa74498
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: GitHub <noreply at github.com>
date: 2019-10-07T12:10:15+03:00
summary:

bpo-25988: Do not expose abstract collection classes in the collections module. (GH-10596)

files:
A Misc/NEWS.d/next/Library/2018-11-19-10-23-58.bpo-25988.6o7gGK.rst
M Doc/whatsnew/3.9.rst
M Lib/collections/__init__.py

diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 690b536fd881f..9f2a659a9dca7 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -195,6 +195,11 @@ Deprecated
 Removed
 =======
 
+* The abstract base classes in :mod:`collections.abc` no longer are
+  exposed in the regular :mod:`collections` module.  This will help
+  create a clearer distinction between the concrete classes and the abstract
+  base classes.
+
 * The undocumented ``sys.callstats()`` function has been removed. Since Python
   3.7, it was deprecated and always returned :const:`None`. It required a special
   build option ``CALL_PROFILE`` which was already removed in Python 3.7.
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 859b8460e48d5..2fc71e2991ab6 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -39,21 +39,6 @@
     pass
 
 
-def __getattr__(name):
-    # For backwards compatibility, continue to make the collections ABCs
-    # through Python 3.6 available through the collections module.
-    # Note, no new collections ABCs were added in Python 3.7
-    if name in _collections_abc.__all__:
-        obj = getattr(_collections_abc, name)
-        import warnings
-        warnings.warn("Using or importing the ABCs from 'collections' instead "
-                      "of from 'collections.abc' is deprecated since Python 3.3, "
-                      "and in 3.9 it will stop working",
-                      DeprecationWarning, stacklevel=2)
-        globals()[name] = obj
-        return obj
-    raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
-
 ################################################################################
 ### OrderedDict
 ################################################################################
diff --git a/Misc/NEWS.d/next/Library/2018-11-19-10-23-58.bpo-25988.6o7gGK.rst b/Misc/NEWS.d/next/Library/2018-11-19-10-23-58.bpo-25988.6o7gGK.rst
new file mode 100644
index 0000000000000..21d25e8d74ced
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-11-19-10-23-58.bpo-25988.6o7gGK.rst
@@ -0,0 +1,2 @@
+The abstract base classes in :mod:`collections.abc` no longer are exposed in
+the regular :mod:`collections` module.



More information about the Python-checkins mailing list