846

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

17 回答 17

1155

蟒蛇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

蟒蛇 3

.与之前相同,但如果不使用子目录,则在模块名称前加上前缀:

from .user import User
from .dir import Dir
于 2010-11-10T07:36:10.503 回答
167

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

from .user import User
from .dir import Dir
于 2015-02-08T10:07:43.053 回答
48

在你的main.py

from user import Class

Class您要导入的类的名称在哪里。

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

Class.method

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

于 2010-11-10T07:38:33.130 回答
47

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

import user

但是,如果从不包含user.py.
在这种情况下,使用

from . import user

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

于 2019-07-16T13:40:56.677 回答
15

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

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)
于 2014-07-21T11:54:50.997 回答
14

如果 user.py 和 dir.py 不包括类,那么

from .user import User
from .dir import Dir

不管用。然后你应该导入为

from . import user
from . import dir
于 2019-09-16T15:51:46.960 回答
11

为了使其更易于理解:

第 1 步:让我们转到一个目录,其中将包含所有内容

$ cd /var/tmp

第 2 步:现在让我们创建一个 class1.py 文件,该文件具有类名 Class1 和一些代码

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

第 3 步:现在让我们创建一个 class2.py 文件,该文件具有类名 Class2 和一些代码

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

第 4 步:现在让我们制作一个 main.py,它将执行一次以使用来自 2 个不同文件的 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]:
于 2013-09-21T19:17:47.837 回答
8

蟒蛇 3


一样directory

导入文件:log.py

导入类:SampleApp().

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

或者

目录是basic.

导入文件:log.py.

导入类:SampleApp().

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()
于 2018-11-15T09:05:33.443 回答
6
from user import User 
from dir import Dir 
于 2010-11-10T07:35:38.743 回答
4

我不确定为什么会这样,但使用 Pycharm 构建from file_in_same_dir import class_name

IDE 抱怨它,但它似乎仍然有效。我正在使用 Python 3.7

于 2020-02-27T20:56:11.277 回答
2

对于 Python 3+,假设您具有以下结构:

A/
  __init__.py
  bar.py
  foo.py

在你的__init__.py文件中,你可以把from . import foo

然后你可以在 bar 文件中导入 foo

# A/bar.py
from foo import YourClass

这些文件的目的__init__.py是包括在遇到不同级别的包时运行的可选初始化代码。您放入的所有内容都将__init__.py在包加载期间进行初始化。

于 2021-06-25T07:56:36.303 回答
1

对于python3

从兄弟from .user import User
进口:从侄子进口:from .usr.user import User

于 2020-11-24T09:36:47.073 回答
0

如果您filename.py在同一个文件夹中,您可以像这样轻松导入它:

import filename

我正在使用python3.7

于 2020-12-21T05:22:11.323 回答
0
# My Python version: 3.7
# IDE: Pycharm 2021.1.2 Community

# Have "myLib" in folder "labs":

class Points:
    def __init__(self, x = 0, y = 0):
        self.__x = x
        self.__y = y
    def __str__(self):
        return f"x = {self.__x}, y = {self.__y}"

# Have "myFile" in (same) folder "labs":

from myFile import Point

p1 = Point(1, 4)
p2 = Point(1, 4)
print(f"p1: {p1}, p2: {p2}")

# Result:
# p1: x = 1, y = 4, p2: x = 1, y = 4

# Good Luck!
于 2021-06-07T17:32:20.393 回答
-2

太简单了,创建一个文件__init__.py是类目录,然后将其导入到您的脚本中,如下所示(导入所有大小写)

from classes.myscript import *

仅导入选定的类

from classes.myscript import User
from classes.myscript import Dir
于 2017-01-26T04:00:06.077 回答
-3

Python3

采用

from .user import User inside dir.py file

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

像这样

于 2019-12-05T19:22:20.423 回答
-4

从同一目录导入

from . import the_file_you_want_to_import 

从子目录导入该目录应包含

初始化.py

文件而不是你的文件然后

从目录导入 your_file

于 2019-08-24T06:06:09.970 回答