项目结构如下:
dir/
__init__.py
foo.py
Foo.py 有一个使用局部赋值的函数:
"""foo.py"""
BAR = 12345
def foo():
# do something with BAR
我的目标是导入对象 BAR
以在我自己的代码中使用。但是,__init__.py
包含一个 bar 的导入,它屏蔽了任何从 foo
导入为模块的尝试:
"""__init__.py"""
from dir.foo import foo
因此,当我与包交互时,我只能将 dir.foo
视为函数定义而不是模块。我怎样才能访问 dir.foo.BAR
?
最佳答案
蹩脚的黑客:
import sys
foo_module = sys.modules["dir.foo"]
bar = foo_module.BAR
更好的方法可能是要求 dir
的作者不要在顶级命名空间中隐藏子模块名称,例如避免以与所在模块相同的方式命名函数定义。
关于python - 从与 __init__ 导入同名的 python 模块导入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292959/