我有一个包含许多模块的Python应用程序。有一个YAML配置文件,其中包含每个模块的配置设置。在每个模块的 init ()中,我加载配置,然后将其处理为该模块的配置字典。
现在处理很难看。每个模块开头有几十行,有很多东西,比如:
if 'foo' not in config:
config['foo'] = bar
或
if 'foo' in config:
config['foo'] = string_to_list(config['foo'])
else:
config['foo'] = list()
等
所以现在我想编写一个每个模块都可以使用的集中式配置处理方法。我想我想使用YAML格式的字符串来指定最终配置应该是什么样子。 (哪些设置是必需的,默认值,对象类型等)
我认为每个模块中的配置规范可能是这样的:(使用类型|默认|必需值)
config_template = """MySection:
setting1: int|0
setting2: string|None|required
setting3: int|10"""
到目前为止,这么好。我真正的问题是,是否有任何方法可以在 init ()或其他内容的文档字符串中的每个模块中保存此配置规范。我认为,因为我基本上定义了模块对其配置的期望,以及默认值和类型,如果我可以将此配置文件存储在docstring中,那么我应该能够编写某些内容和/或配置sphinx以便为文档做好准备?
所以我想知道这种方法听起来是否合理,如果是这样,有没有办法将这个配置信息存储在docstring中以使其作为双重职责工作?
编辑:我考虑先设置一个默认值的字典,当然这会处理默认值。但是在很多情况下我需要将值设置为某种类型。例如,可能有些必须是列表,但是如果在配置文件中输入单个项目,它将被读取为字符串,因此我需要配置处理器将字符串转换为具有该字符串作为其唯一项目的列表
编辑2:我之所以询问docstring的原因是因为我认为我的配置规范本质上会告诉程序员这个模块在配置字典方面的期望是什么,所以如果我能在docstring中做到这一点那么我可以只指定一次,让模块将其用于配置,并将其显示在sphinx文档中。但如果那不可能,那就这样吧。我可以在变量中使用它(就像我上面的例子中那样),然后手动编写docstring。谢谢! 布赖恩