Python:导入模块模块

时间:2013-11-22 22:19:37

标签: python

我目前有目录结构

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

我想使用foo.pybar.py中的函数定义,所以写了这个:

import module

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

但是我收到错误'module' object has no attribute 'foo'。 这有什么问题?

4 个答案:

答案 0 :(得分:3)

首先,它应该是__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时,它会将foobar导入其命名空间。因此,当您在脚本中访问它时,module已经将foo子模块导入其命名空间。

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

# __init__.py
from foo import fooFunction

# script
import module
module.fooFunction()

答案 1 :(得分:0)

__init__.py文件中(注意下划线 - 你的没有它们),你必须import from你的子模块。

mymod/__init__.py

from mysubmod1 import f
from mysubmod2 import g

outside.py

from mymod import f, g

答案 2 :(得分:0)

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

import module.foo。

module.foo.foofunc()

答案 3 :(得分:0)

不要忘记'作为' 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()'

更简洁