这是一个糟糕的编程实践,是的,我知道,但这些脚本都是我的,这种技术将大大简化我的编码。在
现在,我有一个SQLite数据库,其中包含一组表示脚本配置指令的键值对。脚本本身是一个类,我将其导入到其他脚本中。在
所以,现在,当我想访问一个配置变量时,我调用类似于:
myLib.myClass.getConfigVariable("theItemIWant")
在脚本中使用配置变量时,这会变得非常糟糕。在
所以我想简化对这些变量的访问。我可以使用一个字典,它在类加载时预先填充,并执行以下操作:
^{pr2}$但我想得更优雅一点。我编写了一个单独的配置类,我想提供对配置项的可变级别访问。在
所以我想做的是:
^{3}$或者在这样的脚本中实例化一个对象:
def myRoutine(self):
cfg = myLib.Config()
print cfg.theItemIWant
我读过一些难看的(使用exec)方法来实现这一点,我实际上对此很满意,但我不知道如何用这种方式设置类级别的变量。大多数人建议要么使用exec,要么修改vars或globals,但我不确定这是否能直接在Config类上设置变量,而不是在其他地方。在
使用exec失败:
SyntaxError: unqualified exec is not allowed in function '__init__' it contains a nested function with free variables
因此,我看到的唯一方法就是修改vars(),但我不确定这是如何应用于类的。在
我想你想要的只是给一个成员变量赋值,比如:
这将打印“项目”。参见:http://ideone.com/LDz7NK
如果要动态选择变量名,请使用
setattr(cfg, "another_item_i_want", "another item")
。在一个不想重蹈覆辙的解决方案。当您只想读取config一次,并且它的结构是扁平的时,就可以工作了。在
该函数返回一个不可变的对象,该对象具有以配置参数名称命名的属性。在
^{pr2}$我曾经使用这种方法来读取标准
ConfigParser
实例中的部分。在您可以简单地为您的配置对象实现
__getattr__()
函数,例如请参见here,以获取python文档中
__getattr__()
的描述。在相关问题 更多 >
编程相关推荐