我有一个存放所有.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.3开始,__init__.py不再需要。如果控制台的当前目录是python脚本所在的目录,那么一切都可以正常工作

import user

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

from . import user

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

其他回答

从同一目录导入

from . import the_file_you_want_to_import 

要从目录应包含的子目录导入

init.py

那就别写你的文件了

从目录导入your_file

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

像这样

实际上,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 ...

为了更容易理解:

步骤1:让我们进入一个目录,在那里所有将包括

$ cd /var/tmp

步骤2:现在让我们创建一个class .py文件,它有一个类名Class1和一些代码

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

步骤3:现在让我们创建一个class .py文件,它有一个类名Class2和一些代码

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

步骤4:现在让我们创建一个main.py,它将执行一次,使用来自两个不同文件的Class1和Class2

$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2

print Class1.OK
print Class2.OK
EOF

第五步:运行程序

$ python main.py

输出将是

[Class1 OK]: 
[Class2 OK]:

在main.py中:

from user import Class

其中Class是要导入的类的名称。

如果你想调用Class的一个方法,你可以使用:

Class.method

注意,在同一目录下应该有一个空的__init__.py文件。