【AI问答】python引入其他模块的对象

目录a/b/c.py

d/e/f.py

f该如何引入c中的对象

在给出的目录结构下:

text 复制代码
project_root/
├── a/
│   └── b/
│       └── c.py
└── d/
    └── e/
        └── f.py

f.针对 py 而言, 要是打算引入 c.py 里的对象, 可选方式存在好几种, 具体选择哪些方式须视你的项目结构情况, 以及你期望怎样去组织那代码而定。

方法一:使用绝对导入(推荐)

前提: a目录得是包(也就是说要包含.py文件), 或者, 该目录必须处于模块搜索路径里(像通过设置实现, 或借助sys.path添加达成), d目录同样如此, 要么是包包含.py文件, 要么得在模块搜索路径中, 通过设置或者用sys.path添加。

目录结构:

text 复制代码
project_root/
├── __init__.py
├── a/
│   └── b/
│       ├── __init__.py
│       └── c.py
└── d/
    └── e/
        ├── __init__.py
        └── f.py

f.py 中:

text 复制代码
from a.b.c import SomeObject  # 假设 c.py 中定义了 SomeObject

方法二:使用相对导入(不推荐)

通过文件系统里的相对位置来进行相对导入,一般不大建议用于跨目录的导入情形, 因为这样有可能致使代码在维护以及移植方面比较困难。

f.py 中:

text 复制代码
from ...a.b.c import SomeObject  # 三个点表示从当前文件向上三级

请注意, 相对导入的语法当中, 那表示向上三级目录的这种情况, 然而此方式在实际运用的时候极易出现错误, 并且它还依赖于文件系统的层次结构。

方法三:动态修改 sys.path

要是a以及d并非包, 又或者你并不打算运用包结构, 那么能够借由动态地对sys.path加以修改从而实现导入。

f.py 中:

text 复制代码
import sys
import os
# 获取项目根目录
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
# 将项目根目录添加到 sys.path
sys.path.insert(0, project_root)
# 现在可以导入 c.py 中的对象
from a.b.c import SomeObject

总结

推荐使用:

要是保证a目录以及它的子目录, 还有d目录以及它的子目录里都存有.py文件, 之后于f.py里采用绝对导入:

text 复制代码
from a.b.c import SomeObject
相关推荐
wuyk55536 分钟前
Python零基础入门第五章:元组Tuple(不可变容器详解、列表与元组区别)
开发语言·python
zhanghaha131441 分钟前
Python进阶教程:13_math 模块 —— 新手完全指南
数据库·python·机器学习
aiqianji1 小时前
教AI短篇小说写作的软件操作简单,该怎么挑选呢?
人工智能·python
circuitsosk1 小时前
Python 模块与包管理:import 机制、虚拟环境与 pip 完全指南
开发语言·python·pip·依赖管理·模块与包
weixin_440730502 小时前
python+request实现接口-小结
开发语言·python
zlinear数据采集卡2 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
for_ever_love__3 小时前
PySpark学习: 数据输出
开发语言·python·学习·spark
张人玉3 小时前
基于 Python 的桌面端智能识别与可视化系统——生活垃圾分类可视化大屏
python·分类·sqlite·echarts·生活
何以解忧,唯有..3 小时前
Python os模块详解:文件与目录操作指南
java·服务器·python