繁体   English   中英

Python:导入模块的模块

[英]Python: Importing Modules of Modules

我目前有目录结构

- module
    - __init__.py
    - foo.py
    - bar.py

我想同时使用foo.pybar.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 ,它又将foobar导入到其命名空间中。 因此,当您在脚本中访问它时, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM