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

Python包导入疑问:为何两种调用方式均生效?

为什么import package_top后两种调用方式都能生效?

这是Python包导入机制的正常行为,核心原因在__init__.py的导入语句上:

当你执行import package_top时,Python会运行包根目录下的__init__.py。里面的from .module import hello这行代码,实际做了两件事:

  • 把module.py里的hello函数直接导入到package_top的命名空间里,所以package_top.hello()能正常调用,这和你理解的一致;
  • 而Python要完成“从module里取hello”这个动作,必须先完整加载module模块,并且会自动把这个模块作为package_top的一个属性(也就是package_top.module)保留下来。这就导致你即使没显式写import package_top.module,也能通过package_top.module.hello()访问到函数。

如果想阻止package_top.module被外部访问,可以修改__init__.py,手动清理模块引用:

from .module import hello
# 删除module的引用
del module

不过这种场景很少见,一般来说允许访问子模块并不会有什么问题。

你可以在main.py里加一行print(dir(package_top)),会看到输出里包含module,这就能直观证明模块已经被加载到包的命名空间中了。

内容的提问来源于stack exchange,提问作者zicheng zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:08:17