2010-05-18 66 views
8

对于另一个__init__.py问题,我表示歉意。如何从包的更深层部分访问__init__.py变量

我有以下封装结构:

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

在顶层__init__.py我定义:USER='me'。如果我从命令行输入import contrib,那么我可以访问contrib.USER

现在,我想从withih connection.py访问contrib.user,但我不能这样做。

当我发出from contrib.database import connection时调用顶层__init__.py,所以Python真的创建参数USER

所以问题是:如何从子女内访问顶级__init__.py中声明的参数和变量。

谢谢。

编辑:

我知道你可以添加import contribconnection.py,但似乎重复,因为它是明显的(错误呢?),如果你需要connection.py您是否已经导入contrib

回答

12

添加import contribconnection.py是要走的路。是的,contrib模块已经导入(您可以从sys.modules中找到)。问题在于connection.py中的代码没有引用模块。做另一次导入会给你参考。您不必担心额外的加载时间,因为模块已经加载。

+0

从理论上讲,你可以从'sys.modules'中取出它,因为你知道它存在,但是我强烈建议*不要这样做。伟业堂的答案好多了。 – Kevin 2015-01-16 22:55:37

0

您需要在connection中导入contrib。使用相对导入(..contrib)或绝对导入。