该项目的结构如下:
dir/
__init__.py
foo.py
Foo.py具有使用本地分配的功能:
"""foo.py"""
BAR = 12345
def foo():
# do something with BAR
我的目标是导入对象BAR
以在我自己的代码中使用。但是,__init__.py
包含一个导入条,它掩盖了从foo
作为模块导入的任何尝试:
"""__init__.py"""
from dir.foo import foo
因此,当我与程序包交互时,我只能看到dir.foo
作为函数定义而不是模块。如何获得对dir.foo.BAR
的访问权限?
答案 0 :(得分:1)
黑客入侵:
import sys
foo_module = sys.modules["dir.foo"]
bar = foo_module.BAR
更好的方法可能是要求dir
的作者不要在顶级名称空间中隐藏子模块名称,例如,避免使用与定义模块相同的方式来命名函数。 / p>