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

如何避免Python类__module__属性中的路径重复问题?

解决Python库中类导入路径重复(mylib.mylib.MyClass)的问题

为什么会出现重复路径?

MyClass.__module__属性记录的是类定义所在的原始模块路径。你的MyClass定义在mylib/mylib.py模块中,对应的模块名是mylib.mylib——即便你在mylib/__init__.py中将它导入到包级别,类本身的__module__并不会自动改变,所以打印时会显示原始的模块路径。

如何避免路径重复?

不需要把所有代码塞进__init__.py,有两种更优雅的方案:

方案1:手动修正类的__module__属性

在包的__init__.py中导入类后,直接修改它的__module__为包名:

# mylib/__init__.py
from .mylib import MyClass

# 修正模块路径显示
MyClass.__module__ = 'mylib'

此时再导入打印:

from mylib import MyClass
print(MyClass)  # <class 'mylib.MyClass'>

方案2:调整模块命名(可选)

如果不想手动修改属性,可以把存放MyClass的mylib.py重命名为更具语义的名字(比如core.py),这样原始模块路径会变成mylib.core.MyClass,配合方案1修正后,对外展示的路径依然是整洁的mylib.MyClass,同时模块结构更清晰。

PyTorch就是用类似方案1的方式:Tensor定义在torch/_tensor.py中,导入到torch/__init__.py后,会修正它的__module__属性,让对外展示的路径是torch.Tensor而非torch._tensor.Tensor。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:20:26