繁体   English   中英

跨模块变量共享,无需重复导入

[英]Cross module variable sharing without duplicating imports

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

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

# models logic

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

from models import db, User, ...

但是我想从flask应用程序中的一个配置文件移动所有设置的初始化:

因此,我可以将导入db与其他内容分开(我需要使用它来访问models模块变量db ):

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级间接访问,以便您的代码如下所示:

import const
import runtime

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

你得到:

  • 叶模块const清晰分离
  • 可以模拟和/或重新加载
  • 所有用户模块中的统一简洁访问

要在runtime获取丰富的API,请使用“在导入时用对象替换模块”技巧(请参见模块上的__getattr__

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM