You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从配置文件创建类/实例变量?

解决方案

一、自动创建类/实例变量

你可以通过指定exec()的作用域字典,把配置里的变量批量提取出来,直接绑定到实例或类上,不用手动逐个赋值。

1. 绑定为实例变量(推荐)

在类的__init__方法里,用临时字典承接exec执行后的变量,再把字典内容更新到实例的属性字典self.__dict__中:

class ConfigReader:
    def __init__(self, config_path):
        config_vars = {}
        with open(config_path) as f:
            # 把配置变量存到config_vars字典里
            exec(f.read(), globals(), config_vars)
        # 批量转为实例属性
        self.__dict__.update(config_vars)

# 使用示例
fr = ConfigReader(r'C:\Users\username\proj\config.ini')
print(fr.env)                # 输出 'test'
print(fr.target_database)    # 输出 'snowflake'
print(fr.seed_query)         # 输出 "some select query"

2. 绑定为类变量

如果想让所有实例共享配置,可以把变量绑定到类上:

class ConfigReader:
    @classmethod
    def load_class_config(cls, config_path):
        config_vars = {}
        with open(config_path) as f:
            exec(f.read(), globals(), config_vars)
        # 批量更新类属性
        cls.__dict__.update(config_vars)

# 先加载类配置
ConfigReader.load_class_config(r'C:\Users\username\proj\config.ini')
# 所有实例都能访问这些类变量
fr1 = ConfigReader()
fr2 = ConfigReader()
print(fr1.env == fr2.env)  # 输出 True

二、将配置变量放到__init__.py中作为全局变量

完全可以,在你的包的__init__.py里执行读取配置的代码,把变量直接定义在模块级别,整个包内的模块都能直接导入使用:

在your_package/__init__.py中:

# __init__.py
config_vars = {}
with open(r'C:\Users\username\proj\config.ini') as f:
    exec(f.read(), globals(), config_vars)
# 把配置变量导入到模块全局作用域
globals().update(config_vars)

然后在包内的其他模块中直接导入:

# 包内其他文件
from your_package import env, target_database, con_info

注意事项

  • 你的config.ini本质是Python代码片段,不是标准INI格式,用exec可行,但要确保配置文件安全,不要加载不可信的文件。
  • 如果想改用标准INI格式,可使用Python内置的configparser模块,但需要调整配置文件为分组键值对的格式。

内容的提问来源于stack exchange,提问作者shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:27:33