您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么Python的import语句的from形式绑定模??块名称?

为什么Python的import语句的from形式绑定模??块名称?

导入系统文档中

当使用任何机制(例如importlibAPI,import或, 语句或内置__import__())加载子模块时,将在父模块的名称空间中放置与子模块对象的绑定。例如,如果packagespam具有一个子模块foo,则在导入后spam.foospam将具有foo绑定到该子模块的属性。假设您具有以下目录结构:

spam/
    __init__.py
    foo.py
    bar.py

spam/__init__.py包含以下几行:

from .foo import Foo
from .bar import Bar

后执行以下命令,将名称绑定到foobar放在spam模块中:

>>> import spam
>>> spam.foo
<module 'spam.foo' from '/tmp/imports/spam/foo.py'>
>>> spam.bar
<module 'spam.bar' from '/tmp/imports/spam/bar.py'>

鉴于Python熟悉的名称绑定规则,这似乎令人惊讶,但这实际上是导入系统的基本功能。不变的条件是,如果您有sys.modules['spam']andsys.modules['spam.foo'](如在上述导入之后一样),则后者必须作为foo前者的属性出现。

如果这样做from testapp.api.utils import x,import语句将不会加载utils到本地名称空间中。但是,导入机制 加载utilstestapp.api名称空间中,以使进一步的导入工作正常。碰巧您的情况testapp.api也是本地名称空间,所以您会感到惊讶。

python 2022/1/1 18:33:32 有349人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶