Python中点标记法是否已废弃?如何优化__init__.py的使用?
关于Python相对导入与__init__.py优化的问题
1. 点标记法(相对导入)并未被废弃
你用到的from .bfs import BFS属于相对导入,是Python官方认可的包内模块间导入方式,并没有被废弃。这种写法专门用于同一包(此处为src包)内的模块互相引用,完全符合Python模块系统的规范。
反馈里提到的“已废弃”大概率是误解:
- 可能是代码检查工具的误报,部分工具对导入方式有偏好,但不代表语法本身被废弃。
- 也可能是招聘方的项目规范要求使用绝对导入(比如
from src.bfs import BFS),但这只是团队规范选择,并非语法层面的废弃。
2. init.py的更优使用方式
结合你的项目结构,src/__init__.py可以从以下维度优化:
(1)统一导出公共接口
将包内需要对外暴露的类、函数统一在__init__.py中导出,外部使用时无需深入子模块,简化导入路径:
# src/__init__.py from .bfs import BFS # 后续新增模块(如dfs.py)也可统一添加 # from .dfs import DFS
外部main.py即可直接写:
from src import BFS
而非from src.bfs import BFS,让包的使用更简洁直观。
(2)控制导入范围,避免冗余
不在__init__.py中导入无需对外暴露的内部模块或私有对象,保持包的接口清晰,同时减少不必要的初始化开销。
(3)定义包级公共资源
如果整个src包有通用常量、配置或工具函数,可放在__init__.py中作为包的公共资源:
# src/__init__.py DEFAULT_TIMEOUT = 30 def package_common_tool(): # 包内通用工具逻辑 pass from .bfs import BFS
(4)缓解循环导入问题
若包内模块存在循环依赖,可在__init__.py中调整导入顺序,或把共享对象放在这里,让其他模块从__init__.py导入,避免循环依赖报错。
(5)用__all__约束*导入的内容
如果允许外部使用from src import *,可通过__all__列表明确指定可导入的对象,避免导入冗余内容:
# src/__init__.py __all__ = ['BFS'] from .bfs import BFS
内容的提问来源于stack exchange,提问作者kozaczinioo
相关产品推荐
相关产品推荐

