在构建机器人项目时,随着项目规模变大,代码不可能全部写在一个文件里。为了便于区分功能、方便管理代码,我们会将 .py 文件按功能放在不同文件夹中,并在每个文件夹里建立一个 __init__.py(内容可以为空),例如:
my_project/
├── main.py
└── inv_kine/ ← 放逆运动学相关代码的文件夹
├── init.py
├── ik_solver.py
└── jacobian.py
当你想在 main.py 中使用逆运动学的代码时,可以写 from inv_kine.ik_solver import solve_ik。这行代码能够正常工作,前提是 Python 知道 inv_kine 是一个「包」(可以被导入的模块集合),而不是一个普通文件夹。__init__.py 的作用就是告诉 Python:「这个目录是一个代码包,可以被导入」。
如果有多个包需要导入,每个包都需要建一个 __init__.py。文件名相同并不会产生冲突,因为它们所在的包名(文件夹名)不同,例如:
my_project/
├── main.py
├── inv_kine/
│ ├── init.py ← 完整标识:inv_kine.init
│ └── ik_solver.py
└── aaa/
├── init.py ← 完整标识:aaa.init
└── some_module.py
甚至子包中也可以继续嵌套:
inv_kine/
├── init.py
├── ik_solver.py
└── utils/ ← 子包
├── init.py ← inv_kine.utils.init
└── math_tools.py

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐