You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:30:56