如何在Python中跨脚本调用另一个类中定义的配置变量?
解决方案
你当前的setup方法中定义的数据库连接参数都是函数局部变量,函数执行结束后就会被回收,无法被外部脚本直接调用,需要调整配置存储脚本的逻辑,把配置暴露给外部调用。
第一步:修改 stored_variables.py
class Setup(): @staticmethod def get_db_config(): a = 'X' # 可根据实际需求修改该值,也可以改成入参动态传入 if a == 'X': # X环境的数据库凭证 return { "database": 'a', "user": 'b', "password": 'c', "host": 'd', "port": 4 } elif a == 'Y': # Y环境的数据库凭证 return { "database": 'x', "user": 'y', "password": 'z', "host": 'w', "port": 7 }
我们把原来的setup方法调整为静态方法,执行判断后直接返回对应环境的配置字典,外部调用即可拿到所有参数。
第二步:调整 connection.py 并调用配置
import psycopg2 from stored_variables import Setup class Connection: def __init__(self, host, database, port, user, password): self.conn = psycopg2.connect( database=database, user=user, password=password, host=host, port=port ) # 调用示例 if __name__ == "__main__": # 从配置脚本获取对应环境的数据库配置 db_config = Setup.get_db_config() # 解包字典传入Connection初始化 conn = Connection(**db_config) # 后续可通过conn.conn操作数据库
这里用到了Python的字典解包语法**,会自动把字典的键值对对应到__init__的同名参数中,无需手动逐个传参。
可选优化
如果需要灵活切换环境,可以把环境标识改成方法入参,修改get_db_config如下:
@staticmethod def get_db_config(env: str): if env == 'X': # 返回X环境配置 elif env == 'Y': # 返回Y环境配置
调用时传入指定环境即可,比如Setup.get_db_config("Y")就能拿到Y环境的配置。
内容的提问来源于stack exchange,提问作者Tgr
相关产品推荐
相关产品推荐

