模块没有属性

时间:2012-01-17 17:44:21

标签: python

我的目录中包含许多.py个文件。每个文件定义一些类。我在目录中也有一个空的__init__.py

例如:

myproject
    __init__.py
    mymodule
        __init__.py
        api.py
        models.py
        views.py

我正在尝试导入mymodule并访问所有这些文件中定义的类:

from myproject import mymodule

print mymodule.api.MyClass 

我错误地说mymodule没有属性api。为什么?为什么我只能访问其中一个文件(models.py)而不访问其他文件?

In [2]: dir(banners)
Out[2]:
['__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__',
 '__path__',
 'models']

4 个答案:

答案 0 :(得分:36)

问题是子模块不会自动导入。您必须显式导入api模块:

import myproject.mymodule.api
print myproject.mymodule.api.MyClass

如果您在导入api时确实坚持myproject.mymodule可用,则可以将其放入myproject/mymodule/__init__.py

import myproject.mymodule.api

然后这将按预期工作:

from myproject import mymodule

print mymodule.api.MyClass 

答案 1 :(得分:4)

如果您像我一样是白痴,那么还要检查您是否没有将python文件命名为与尝试导入的模块相同的名称。

答案 2 :(得分:2)

myproject目录中也需要__init__.py。所以你的模块结构应该是:

myproject
    __init__.py
    mymodule
        __init__.py
        api.py
        models.py
        views.py

答案 3 :(得分:1)

模块不会那样工作。

from myproject.mymodule import api
print api.MyClass