给定一个导入模块 B 的模块 A,是否有一种方法可以让模块 B 中的函数(在模块 A 中使用)访问模块 A 中的 __name__
属性,而无需显式传递该属性(例如,函数参数)?
最佳答案
是的,您可以通过函数调用堆栈一级“返回”来访问存储在框架的 f_globals
属性中的调用函数的全局变量。
这就是我的意思:
# The main script.
import module_A
module_A.func()
<小时/>
# module_A.py
import module_B
def func():
module_B.func()
<小时/>
# module_B.py
import sys
def func():
namespace = sys._getframe(1).f_globals # caller's globals
print(f'module_B.func() was called from {namespace["__name__"]}')
运行主脚本的输出:
module_B.func() was called from module_A
我想补充一点,这是一件很棘手的事情,因此在生产代码中执行此操作之前您可能需要三思而后行。
关于python - 可以从导入的模块访问 __name__ 属性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912684/