我有一个存放所有.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

当前回答

Python3

use

from .user import User inside dir.py file

and

use from class.dir import Dir inside main.py
or from class.usr import User inside main.py

像这样

其他回答

如果您不想将函数和类与您的模块混合,您可以导入模块并通过其名称访问它

import util # imports util.py

util.clean()
util.setup(4)

或者可以将函数和类导入到代码中

from util import clean, setup
clean()
setup(4)

您可以使用wildchar *将该模块中的所有内容导入到代码中

from util import *
clean()
setup(4)

Python 3


相同的目录中。

导入文件:log.py

导入类:SampleApp()。

import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

or

目录是最基本的。

导入文件:log.py。

导入类:SampleApp()。

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

从python3.3开始,__init__.py不再需要。如果控制台的当前目录是python脚本所在的目录,那么一切都可以正常工作

import user

但是,如果从不包含user.py的不同目录调用,这将不起作用。 在这种情况下,使用

from . import user

即使您想导入整个文件,而不仅仅是从那里导入一个类,这种方法也有效。

我不知道为什么这个工作,但使用Pycharm构建从file_in_same_dir导入class_name

IDE抱怨它,但它似乎仍然工作。我使用的是Python 3.7

实际上,Python并没有为这种日常用例提供优雅的解决方案。当您正在测试最终将作为Python包的一部分交付的代码时,这尤其成问题。下面是一个对我很有效的方法:

迪尔 |

file1.py file2.py

假设你想从file1导入file2。

# In file1.py:
try:
     # This works when packaged as Python package
     from . import file2
except:
     # This works when simply invoking file1 as a module (i.e. python file1)
     import file2

# rest of the code ...