模块没有该属性

110 投票
4 回答
164236 浏览
提问于 2025-04-17 10:27

我有一个文件夹,里面有很多个.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 个回答

2

模块不是那样工作的。

from myproject.mymodule import api
print api.MyClass
43

还要检查一下,你的Python文件名是不是和你想要导入的模块名字一样。

117

问题是子模块不会自动导入。你需要明确地导入 api 模块:

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

如果你真的希望在导入 myproject.mymoduleapi 模块就能使用,可以在 myproject/mymodule/__init__.py 文件中加入以下内容:

import myproject.mymodule.api

这样做之后,事情就会按预期那样工作:

from myproject import mymodule

print mymodule.api.MyClass 

撰写回答