如何从包的更深层访问__init__.py变量

7 投票
2 回答
3026 浏览
提问于 2025-04-15 22:51

抱歉又要问关于 __init__.py 的问题了。

我有这样一个包的结构:

+contrib
  +--__init__.py
  |
  +database
      +--__init__.py
      |
      +--connection.py

在最上层的 __init__.py 文件里,我定义了一个变量:USER='me'。如果我在命令行中输入 import contrib,那么我就可以访问 contrib.USER

现在,我想在 connection.py 文件里访问 contrib.user,但是我做不到。

当我输入 from contrib.database import connection 时,最上层的 __init__.py 会被调用,所以 Python 确实创建了这个 USER 参数。

所以问题是:如何在子模块中访问最上层 __init__.py 中声明的参数和变量。

谢谢。

编辑:

我意识到可以在 connection.py 中添加 import contrib,但这似乎有点重复,因为如果你需要 connection.py,显然(可能不正确?)你已经导入了 contrib

2 个回答

0

你需要在connection里引入contrib。可以使用相对引入(比如..contrib)或者绝对引入。

13

connection.py文件里加上import contrib是个好主意。没错,contrib这个模块已经被导入了(你可以通过sys.modules来查看)。问题是,在你的connection.py代码里没有对这个模块的引用。再加一次导入就能让你有这个引用。你不用担心加载时间的问题,因为这个模块已经加载过了。

撰写回答