有一个conf.py声明各种变量的配置文件。如果其中任何一个未设置,则配置的应用程序使用默认值。
a = 'value a'
b = 'value b'
# будет использовано значение по умолчанию
# c = 'value c'
我有几十个这样的配置,手动编辑它们很不方便。相反,我使用必要的数据生成配置,将它们序列化为 YAML 并将它们加载到配置中的字典中:
with io.open(conf_path, encoding='utf-8') as fp:
config = yaml.safe_load(fp)
现在我们需要以某种方式初始化变量。到目前为止,我只有这个解决方案,我不喜欢它:
# костыль
if 'a' in source:
a = source['a']
if 'b' in source:
b = source['b']
...
如果我有一堂课,那么setattr. 但就我而言__name__ == '__main__',self没有定义。
for name, value in source.items():
# Это не сработает
setattr(self, name, value)
该怎么办?是否可以传递一些东西setattr,self或者有其他方法吗?
要像字典一样访问全局变量,有一个内置函数
globals()。在您的情况下,在加载配置后,您需要制作update()这个字典: