如何从包的更深层访问__init__.py变量
抱歉又要问关于 __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
代码里没有对这个模块的引用。再加一次导入就能让你有这个引用。你不用担心加载时间的问题,因为这个模块已经加载过了。