diff options
-rw-r--r-- | Doc/library/collections.rst | 2 | ||||
-rw-r--r-- | Doc/whatsnew/3.9.rst | 5 | ||||
-rw-r--r-- | Lib/collections/__init__.py | 15 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst | 4 |
4 files changed, 20 insertions, 6 deletions
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index a5e8d04..65cdf34 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -33,7 +33,7 @@ Python's general purpose built-in containers, :class:`dict`, :class:`list`, :class:`UserString` wrapper around string objects for easier string subclassing ===================== ==================================================================== -.. deprecated-removed:: 3.3 3.9 +.. deprecated-removed:: 3.3 3.10 Moved :ref:`collections-abstract-base-classes` to the :mod:`collections.abc` module. For backwards compatibility, they continue to be visible in this module through Python 3.8. diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 23f0e43..f7e279b 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -471,11 +471,6 @@ Removed since Python 3.2. (Contributed by Victor Stinner in :issue:`38916`.) -* 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 cec6c97..178cdb1 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -39,6 +39,21 @@ except ImportError: 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.10 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/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst b/Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst new file mode 100644 index 0000000..1d0e906 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst @@ -0,0 +1,4 @@ +Revert "Do not expose abstract collection classes in the collections module" +change (bpo-25988). Aliases to ABC like collections.Mapping are kept in +Python 3.9 to ease transition from Python 2.7, but will be removed in Python +3.10. |