Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
b5a3d9be
Commit
b5a3d9be
authored
Apr 22, 2015
by
Barry Warsaw
Browse files
Options
Browse Files
Download
Plain Diff
Issue #24029: Document the name binding behavior for submodule imports.
parents
532af163
4e1f355c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
0 deletions
+40
-0
Doc/reference/import.rst
Doc/reference/import.rst
+35
-0
Misc/NEWS
Misc/NEWS
+5
-0
No files found.
Doc/reference/import.rst
View file @
b5a3d9be
...
...
@@ -468,6 +468,41 @@ import machinery will create the new module itself.
``
create_module
()``
is
not
.
Starting
in
Python
3.6
it
will
be
an
error
to
not
define
``
create_module
()``
on
a
loader
attached
to
a
ModuleSpec
.
Submodules
----------
When
a
submodule
is
loaded
using
any
mechanism
(
e
.
g
.
``
importlib
``
APIs
,
the
``
import
``
or
``
import
-
from
``
statements
,
or
built
-
in
``
__import__
()``)
a
binding
is
placed
in
the
parent
module
's namespace to the submodule object.
For example, if package ``spam`` has a submodule ``foo``, after importing
``spam.foo``, ``spam`` will have an attribute ``foo`` which is bound to the
submodule. Let'
s
say
you
have
the
following
directory
structure
::
spam
/
__init__
.
py
foo
.
py
bar
.
py
and
``
spam
/
__init__
.
py
``
has
the
following
lines
in
it
::
from
.
foo
import
Foo
from
.
bar
import
Bar
then
executing
the
following
puts
a
name
binding
to
``
foo
``
and
``
bar
``
in
the
``
spam
``
module
::
>>>
import
spam
>>>
spam
.
foo
<
module
'spam.foo'
from
'/tmp/imports/spam/foo.py'
>
>>>
spam
.
bar
<
module
'spam.bar'
from
'/tmp/imports/spam/bar.py'
>
Given
Python
's familiar name binding rules this might seem surprising, but
it'
s
actually
a
fundamental
feature
of
the
import
system
.
The
invariant
holding
is
that
if
you
have
``
sys
.
modules
[
'spam'
]``
and
``
sys
.
modules
[
'spam.foo'
]``
(
as
you
would
after
the
above
import
),
the
latter
must
appear
as
the
``
foo
``
attribute
of
the
former
.
Module
spec
-----------
...
...
Misc/NEWS
View file @
b5a3d9be
...
...
@@ -36,6 +36,11 @@ Library
-
Issue
#
23887
:
urllib
.
error
.
HTTPError
now
has
a
proper
repr
()
representation
.
Patch
by
Berker
Peksag
.
Documentation
-------------
-
Issue
#
24029
:
Document
the
name
binding
behavior
for
submodule
imports
.
What
's New in Python 3.5.0 alpha 4?
===================================
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment