关于python:如何导入同一目录或子目录中的类?

How to import the class within the same directory or sub directory?

我有一个存储所有.py文件的目录。

1
2
3
4
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

1
2
3
4
5
bin/
    dir.py
    main.py
    usr/
        user.py


Python 2

在与文件相同的目录中生成一个名为__init__.py的空文件。这意味着对python来说,"可以从这个目录导入"。

然后做…

1
2
from user import User
from dir import Dir

如果文件在子目录中,也同样如此——在子目录中也放置一个__init__.py,然后使用常规的import语句,使用点表示法。对于每一级目录,您需要添加到导入路径。

1
2
3
4
5
bin/
    main.py
    classes/
        user.py
        dir.py

因此,如果目录名为"classes",那么您可以这样做:

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

Python 3

与前一个相同,但如果不使用子目录,则在模块名称前面加一个.

1
2
from .user import User
from .dir import Dir


我刚刚了解到(感谢Martineau的评论),为了从同一目录中的文件导入类,您现在可以用python 3编写:

1
2
from .user import User
from .dir import Dir


在您的main.py中:

1
from user import Class

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

如果要调用Class的方法,可以使用以下方法调用它:

Class.method

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


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

1
2
3
4
import util # imports util.py

util.clean()
util.setup(4)

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

1
2
3
from util import clean, setup
clean()
setup(4)

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

1
2
3
from util import *
clean()
setup(4)

为了使理解更简单:

步骤1:让我们转到一个目录,所有目录都将包含在其中

1
$ cd /var/tmp

第2步:现在让我们制作一个class1.py文件,它有一个类名class1和一些代码

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

第3步:现在让我们制作一个class2.py文件,它有一个类名class2和一些代码

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

步骤4:现在让我们制作一个main.py,它将在两个不同的文件中使用Class1和Class2执行一次。

1
2
3
4
5
6
7
8
9
$ 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

第5步:运行程序

1
$ python main.py

输出将是

1
2
[Class1 OK]:
[Class2 OK]:


1
2
from user import User
from dir import Dir


Python 3

directory

导入文件:log.py

进口类别:SampleApp()

1
2
3
4
import log
if __name__ =="__main__":
    app = log.SampleApp()
    app.mainloop()

目录是basic

档案导入:log.py

进口类别:SampleApp()

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

只是太短暂了,创建一个文件__init__.pyis classes目录,然后将其导入到脚本中,如下所示

1
from classes.myscript import *