我现在有目录结构
- module
- __init__.py
- foo.py
- bar.py我希望使用来自foo.py和bar.py的函数定义,因此编写了以下内容:
import module
module.foo.fooFunction()
module.bar.barFunction()然而,我得到的错误'module' object has no attribute 'foo'。这里有什么问题?
发布于 2013-11-22 22:22:32
首先,应该是__init__.py,而不是init.py。现在,__init__.py是用来设置模块命名空间的。
如果__init__.py是空的,那么要使用fooFunction,也需要导入foo。它不会自动用module导入。
import module.foo
module.foo.fooFunction()如果你不喜欢,你可以:
# __init__.py
import foo
import bar
# script
import module
module.foo.fooFunction()看看那里发生了什么?由于__init__.py导入了foo,当您使用import module时,它反过来将foo和bar导入到它的命名空间中。因此,当您在脚本中访问它时,module已经有一个导入到它的命名空间中的foo子模块。
您甚至可以从foo或bar直接将名称导入模块命名空间:
# __init__.py
from foo import fooFunction
# script
import module
module.fooFunction()发布于 2013-11-22 22:21:39
在__init__.py文件(请注意下划线-您的文件中没有它们)中,您必须对子模块进行import from。
在mymod/__init__.py中
from mysubmod1 import f
from mysubmod2 import g在outside.py中
from mymod import f, g发布于 2013-11-22 22:29:49
模块只是父文件夹,而不是真正的模块。如果init.py为空,则必须执行以下操作:
导入module.foo。
module.foo.foofunc()
https://stackoverflow.com/questions/20155570
复制相似问题