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

为什么Python包pkg的dir()返回结果中会出现自身pkg名称?

问题结论与原因说明

现象是否正常

这个现象是完全正常的,不属于Python解释器故障或者包结构错误。

触发原因

该现象是你在pkg/__init__.py中使用的导入语句写法直接导致的:

  • 当你执行import pkg时,Python会先实例化pkg模块对象,再执行pkg/__init__.py的代码完成模块初始化
  • __init__.py中的代码import pkg.aaa是顶层绝对导入,Python解析这条语句时,会先将已经创建的pkg模块对象绑定到当前__init__.py的全局作用域(也就是pkg模块自身的作用域),再继续导入pkg.aaa子模块
  • 这个隐式绑定的pkg全局变量就会出现在dir(pkg)的输出结果中,且因为它始终指向模块自身,所以pkg is pkg.pkg.pkg的验证结果为True

为什么其他包没有该现象

绝大多数Python包导入自身子模块时,会用两种更规范的写法避免该问题:

  • 相对导入写法:from . import aaa
  • 绝对导入别名写法:import pkg.aaa as aaa
    以上两种写法都不会将pkg名称绑定到当前模块的全局作用域,自然不会出现多余的pkg条目。

修复方案

将pkg/__init__.py中的导入语句替换为from . import aaa即可,修改后重新导入pkg,dir(pkg)结果中将不再包含多余的pkg名称,且pkg.aaa的访问能力不受影响。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:07