如何在Python模块内部为自身定义别名?这种做法是否合理?
是否可以实现?
可以实现,只需要在模块内部将自身注册到Python导入缓存sys.modules中即可。
以some_looooooooong_name.py模块为例,在模块顶层添加如下代码:
import sys # 模块原有业务逻辑 name = "测试属性" # 注册别名 sys.modules["slm"] = sys.modules[__name__]
完成后只要用户执行过import some_looooooooong_name操作,就可以直接通过slm.name调用模块内容,后续用户直接执行import slm也能正常导入该模块。
这种做法是否值得推荐?
非常不推荐,也不符合Python社区通用开发规范,核心原因如下:
- 违反使用直觉:用户仅导入了长名称模块,却会凭空在全局导入缓存中出现
slm别名,不熟悉模块逻辑的开发者很难排查别名来源,增加维护成本 - 存在命名冲突风险:如果用户环境中已经存在名为
slm的其他模块,该操作会直接覆盖导入缓存中的对应项,导致其他模块无法正常使用,引发难以排查的导入异常 - 不符合社区通用习惯:Python生态默认将别名定义权交给使用方,通用做法是由用户按需执行
import some_looooooooong_name as slm自定义别名,而非模块开发方强制注入别名
如果确实希望降低用户的导入成本,更合理的方案是在官方文档中明确告知推荐使用的别名导入写法,或是直接发布短名称的模块包。
内容的提问来源于stack exchange,提问作者anirudh
相关产品推荐
相关产品推荐

