Python如何在被调用模块内获取调用方模块对象及__doc__文档字符串
解决方案
方案1:获取主运行脚本的模块对象(适配当前场景)
你运行python a.py时,a.py会作为主入口模块以__main__的名字被加载到Python的模块缓存中,直接从sys.modules读取即可,完全不会触发导入逻辑,不存在循环导入问题:
# b.py 代码 import sys def func(): # 直接从模块缓存取主运行模块对象 main_module = sys.modules["__main__"] # 读取__doc__ print(main_module.__doc__)
方案2:获取任意调用方的模块对象
如果你需要拿到直接调用func的上层模块(而非固定主入口模块),可以用inspect模块读取调用栈获取对应模块,不需要手动解析文件名:
# b.py 代码 import inspect def func(): # 取调用栈的第1层帧(第0层是func本身的帧) caller_frame = inspect.stack()[1].frame # 根据栈帧获取对应的模块对象 caller_module = inspect.getmodule(caller_frame) print(caller_module.__doc__)
验证示例
给a.py添加文档字符串即可测试效果:
# a.py 代码 """这是a.py的文档字符串""" import b b.func()
运行python a.py即可成功输出对应的文档内容。
内容的提问来源于stack exchange,提问作者Berry Tsakala
相关产品推荐
相关产品推荐

