[英]Python: Importing Modules of Modules
我目前有目录结构
- 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'
。 这里有什么问题?
首先,它应该是__init__.py
,而不是init.py
现在, __init__.py
可以设置模块的名称空间。
如果__init__.py
为空, fooFunction
使用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()
在__init__.py
文件中(请注意下划线-您的下划线没有这些),您必须import from
子模块中import from
。
在mymod/__init__.py
:
from mysubmod1 import f
from mysubmod2 import g
在outside.py
:
from mymod import f, g
模块仅是父文件夹,而不是实际模块。 如果init .py为空,则必须执行以下操作:
导入module.foo。
module.foo.foofunc()
不要忘记' as'Python关键字。 对于方案
- module
- __init__.py
- foo.py
- bar.py
另一个解决方案是这样的:
import module.foo as someAlias
# this can then be called as
someAlias.fooFunction()
其中someAlias可以是您选择的任何东西。 如您所见,它比写出'module.foo.fooFunction()'更为冗长
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.