我有一个存放所有.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
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
为了更容易理解:
步骤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]:
如果您不想将函数和类与您的模块混合,您可以导入模块并通过其名称访问它
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)
# 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!
我不能为顶部的答案提交编辑,所以根据上面评论中给出的一些指针,另一件要尝试的事情是:
from subfolder.MyClassFile import MyClass
就是这样。只要记住在我们的子文件夹中有一个__init__.py空文件。
仅供参考,如果你的结构是这样的,解决方案是有效的:
your_project/
__ini__.py
main.py
subfolder/
__init__.py
MyClassFile.py <-- You want this
MyClassFile.py包含MyClass类。