首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:导入模块模块

Python:导入模块模块
EN

Stack Overflow用户
提问于 2013-11-22 22:19:36
回答 4查看 97关注 0票数 2

我现在有目录结构

代码语言:javascript
运行
复制
- module
    - __init__.py
    - foo.py
    - bar.py

我希望使用来自foo.pybar.py的函数定义,因此编写了以下内容:

代码语言:javascript
运行
复制
import module

module.foo.fooFunction()
module.bar.barFunction()

然而,我得到的错误'module' object has no attribute 'foo'。这里有什么问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-22 22:22:32

首先,应该是__init__.py,而不是init.py。现在,__init__.py是用来设置模块命名空间的。

如果__init__.py是空的,那么要使用fooFunction,也需要导入foo。它不会自动用module导入。

代码语言:javascript
运行
复制
 import module.foo
 module.foo.fooFunction()

如果你不喜欢,你可以:

代码语言:javascript
运行
复制
# __init__.py
import foo
import bar

# script
import module
module.foo.fooFunction()

看看那里发生了什么?由于__init__.py导入了foo,当您使用import module时,它反过来将foobar导入到它的命名空间中。因此,当您在脚本中访问它时,module已经有一个导入到它的命名空间中的foo子模块。

您甚至可以从foo或bar直接将名称导入模块命名空间:

代码语言:javascript
运行
复制
# __init__.py
from foo import fooFunction

# script
import module
module.fooFunction()
票数 3
EN

Stack Overflow用户

发布于 2013-11-22 22:21:39

__init__.py文件(请注意下划线-您的文件中没有它们)中,您必须对子模块进行import from

mymod/__init__.py

代码语言:javascript
运行
复制
from mysubmod1 import f
from mysubmod2 import g

outside.py

代码语言:javascript
运行
复制
from mymod import f, g
票数 0
EN

Stack Overflow用户

发布于 2013-11-22 22:29:49

模块只是父文件夹,而不是真正的模块。如果init.py为空,则必须执行以下操作:

导入module.foo。

module.foo.foofunc()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20155570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档