如何在同一目录或子目录中导入类?
我有一个文件夹,里面存放着所有的 .py 文件。
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
我想在 main.py 中使用 user.py 和 dir.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