跨模块变量共享而不重复导入

时间:2016-03-20 20:41:24

标签: python python-2.7 scope python-module

我有一个带有一些数据逻辑的模块models.py

db = PostgresqlDatabase(database='database', user='user')

# models logic

和实际与数据库交互的烧瓶应用程序:

from models import db, User, ...

但我想从flask app中的一个配置文件初始化所有设置:

所以我可以将db与其他内容分开(我需要这个来访问db中的模块变量models):

import models
from models import User, ...
app.config.from_object(os.environ['APP_SETTINGS'])
models.db = PostgresqlDatabase(database=app.config['db'],
                               user=app.config['db'])

并进一步使用db作为models.db

但似乎有点难看。复制导入,模块内容的不同用法..

有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:0)

我建议使用1级间接,这样你的代码就会变成这样:

import const
import runtime

def foo():
    runtime.db.execute("SELECT ... LIMIT ?", (..., const.MAX_ROWS))

你得到:

  • 明确分离叶子模块const
  • 可以嘲笑和/或重装
  • 所有用户模块中的统一和简洁访问

要在runtime上获取丰富的API,请在导入时使用"替换模块和对象#34;技巧(见__getattr__ on a module