]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-71261: Add paragraph on shadowing submodules with star imports (#107004)
authorwulmer <wulmer@users.noreply.github.com>
Sun, 23 Jul 2023 09:00:42 +0000 (11:00 +0200)
committerGitHub <noreply@github.com>
Sun, 23 Jul 2023 09:00:42 +0000 (03:00 -0600)
Doc/tutorial/modules.rst

index 3bd034bcc9703f8d59a6cb1b211dc66d6d53a633..734dd1cfe6871acd3a7a90079cc358318929d5a9 100644 (file)
@@ -512,6 +512,22 @@ code::
 This would mean that ``from sound.effects import *`` would import the three
 named submodules of the :mod:`sound.effects` package.
 
+Be aware that submodules might become shadowed by locally defined names. For
+example, if you added a ``reverse`` function to the
+:file:`sound/effects/__init__.py` file, the ``from sound.effects import *``
+would only import the two submodules ``echo`` and ``surround``, but *not* the
+``reverse`` submodule, because it is shadowed by the locally defined
+``reverse`` function::
+
+    __all__ = [
+        "echo",      # refers to the 'echo.py' file
+        "surround",  # refers to the 'surround.py' file
+        "reverse",   # !!! refers to the 'reverse' function now !!!
+    ]
+
+    def reverse(msg: str):  # <-- this name shadows the 'reverse.py' submodule
+        return msg[::-1]    #     in the case of a 'from sound.effects import *'
+
 If ``__all__`` is not defined, the statement ``from sound.effects import *``
 does *not* import all submodules from the package :mod:`sound.effects` into the
 current namespace; it only ensures that the package :mod:`sound.effects` has