如何在同一目录或子目录中导入类?

939 投票
20 回答
1661074 浏览
提问于 2025-04-16 06:50

我有一个文件夹,里面存放着所有的 .py 文件。

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

我想在 main.py 中使用 user.pydir.py 里的类。
我该怎么把这些 Python 类导入到 main.py 中呢?
另外,如果 user.py 在一个子文件夹里,我该怎么导入 User 这个类呢?

bin/
    dir.py
    main.py
    usr/
        user.py

20 个回答

77

从Python 3.3开始,__init__.py这个文件就不再是必须的了。只要你在控制台的当前目录是你的Python脚本所在的目录,使用起来就没问题。

import user

不过,如果你从一个不包含user.py的其他目录去调用这个脚本,那就不行了。
在这种情况下,你可以使用:

from . import user

这样做即使你想从那个文件中导入整个文件,而不仅仅是一个类,也能正常工作。

183

我刚刚学到一个知识(多亏了martineau的评论),在Python 3中,如果你想从同一个文件夹里的文件中导入类,你现在应该这样写:

from .user import User
from .dir import Dir
1243

Python 2

在和你的文件同一个文件夹里,创建一个空文件,名字叫 __init__.py。这样做是告诉Python:“可以从这个文件夹里导入东西。”

然后你只需要这样做...

from user import User
from dir import Dir

如果文件在一个子文件夹里,情况也是一样的——在那个子文件夹里也放一个 __init__.py 文件,然后就可以用普通的导入语句,记得用点号来表示层级。每增加一层文件夹,你就需要在导入路径中加上这一层。

bin/
    main.py
    classes/
        user.py
        dir.py

所以如果你的文件夹叫“classes”,你就可以这样做:

from classes.user import User
from classes.dir import Dir

Python 3

和之前一样,不过如果不使用子文件夹,模块名前面要加一个 .

from .user import User
from .dir import Dir

撰写回答