python - 可以从导入的模块访问 __name__ 属性吗

标签 python import module attributes

给定一个导入模块 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/

相关文章:

python - 如何使用 AJAX 使用相同的 html 模板(使用 Python 和 Django)创建和编辑新帖子?

python - 对 NumPy 数组的一行求和

python - BeautifulSoup:在 html 中查找特定 URL 并打印

python - 为什么我无法调用packagename.modulename.foo()?

java - 如何从SD卡或android中的指定路径读取csv文件

f# - 如何将 F# 中的模块导入限制在本地范围内?

python - 为什么 Pandas 在一种情况下会导致 'ZeroDivisionError' 而在另一种情况下不会?

Python:通配符子集导入

module - verilog 看不到我的功能

docker - Ansible容器构建期间未定义的GLIBC_PRIVATE面临的问题