从与__init__导入同名的python模块中导入对象

时间:2019-10-08 19:35:13

标签: python module

该项目的结构如下:

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的访问权限?

1 个答案:

答案 0 :(得分:1)

黑客入侵:

import sys
foo_module = sys.modules["dir.foo"]
bar = foo_module.BAR

更好的方法可能是要求dir的作者不要在顶级名称空间中隐藏子模块名称,例如,避免使用与定义模块相同的方式来命名函数。 / p>