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

标签 python module

项目结构如下:

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/

相关文章:

python - (Python)为什么不在函数中导入模块而不是在开头导入它们的最佳方式?

ruby - 在 Ruby 中创建模块变量

java - 无法正确导入java的opencsv模块[com.opencsv包不存在]

php - 如何 $_GET [' ' ] 从 mod_modulenamet/mpl/default.php 中的 $document->addStylesheet() 到 joomla 模块的 css.php 文件的值

python - 在 Python 中初始化对象类时是否应该运行一个函数?

python - 在虚拟环境中使用代理进行 pip 安装

linux - 如何处理自写字符设备内核模块中的页域错误?

python - 使用 Python 进行 SOAP MTOM 调用

python - 在Python中重写stderr的影响

python - Django Sass 压缩器 django_libsass.SassCompiler : command not found