我有一个用于配置的模块projectConfig
,用于分析项目的示例表:
class SampleSheetFields():
FIELD_1 = "field1"
FIELD_2 = "field2"
class SampleSheetFieldsOld():
FIELD_1 = "field_1"
FIELD_2 = "field_2"
我在其他类似模块中使用了第一堂课:
^{pr2}$问题是我开发软件时经常引用ssFields
。在某些时候,新的规范要求软件也应该使用具有不同字段名的样本表。我发现实现这一点的最快方法是在不太混乱代码的情况下,在projectConfig
中添加类SampleSheetFieldsOld
,并在我的模块中进行条件导入:
class SomeClass:
def __init__(self, useOld):
if useOld:
from projectConfig import SampleSheetFieldsOld as ssFields
else:
from projectConfig import SampleSheetFields as ssFields
...
check(someContent, ssFields.FIELD_1)
请注意,所使用的强制字段具有相同的名称,因此没有冲突或缺少字段。程序按预期工作。在
我的问题是:
如果只需要类属性,可以创建一个类工厂,使用^{} 创建新类,如:
这可以很容易地扩展到更多的字段规范集,并且不需要条件导入:
^{pr2}$您还可以使用^{} ,而不是一个类,这样会更轻量级一些。注意编辑是否符合the style guide。在
这可能不是最糟糕的事情,但我发现有点问题的是,你现在被锁定在两个配置选项中,旧的和新的。如果有一天你需要添加第三个或第四个等集呢?你再也不能使用简单的布尔测试了。在
此外,您的配置选项看起来都只是简单的字符串值,可以通过字符串键访问。你不需要上课。在
我的建议是忘记用源代码进行配置,而使用配置文件。在
projectConfig
中,可以有一个从文件初始化的dict
,该文件的路径/名称可以在命令行上提供,也可以以任何方便的方式提供。所以projectConfig.py
可能会这样:然后在任何需要获得域名的地方,只需访问
^{pr2}$projectConfig.config_options['field_key']
,例如或者使用
dict.get(key, default)
,如果有一个合理的默认值。这样,每次需要切换到一组不同的字段名时,只需创建一个新的配置文件,而不必接触代码。在Python的标准库包含一个^{} module ,它可以为您处理加载。在
相关问题 更多 >
编程相关推荐