我有一个类有一长串变量(至少有一打)。在模块中,我首先导入一个常量文件,其中包含一些helper方法和所有默认常量。在
^{1}$问题:我希望在初始化类时能够指定一个文件,其中该文件包含myConstants.py
中常量的子集。不在init文件中的变量将从默认值加载。比如:
我的想法是
from myConstants import *
from ConfigParser import SafeConfigParser
class SomeClass(ParentClass):
def __init__(var1=VAR1, ..., varN=VARN, initFile=''):
if initFile:
parser = SafeConfigParser().read(initFile)
var1 = parser('constants', 'var1') if parser('constants', 'var1') else VAR1
var2 = parser('constants', 'var2') if parser('constants', 'var2') else VAR2
....
varN = parser('constants', 'varN') if parser('constants', 'varN') else VARN
else:
var1 = VAR1
...
varN = VARN
super(SomeClass, self).init(var1, ...)
self.varM = varM
问题:这是最好的方法吗?如果没有,那是什么?好像有点长篇大论。我也没有嫁给ConfigParser。在
我将使用两个独立的构造函数,一个接受文件,另一个接受显式参数。在
您可以尝试使用configparser对象,并使用默认值字典对其进行修改以满足您的需要:
这将覆盖configparser中所有丢失的值。 之后,您只需传递configparser对象并使用
config_parser["DEFAULT"]["var1"]
等方法访问所有变量。你有一个好的构造器参数,你有一个整齐地捆绑在一起的参数。在另一方面,这有点难看,而且配置解析器只知道如何处理字符串,所以字典可能更适合这个任务。在
我希望这有帮助。在
伙计,这个ConfigParser清楚地显示了它的年龄- 它肯定应该有一个映射接口-我不得不戳了一下 想办法得到它的价值-但这是一个更合适的 为您准备的代码:
相关问题 更多 >
编程相关推荐