这是糟糕的编程实践,是的,我知道,但这些脚本纯粹是我的,这种技术可以大大简化我的编码工作。
现在,我有一个 SQLite 数据库,其中包含一组代表脚本配置指令的键值对。该脚本本身是一个类,我将其导入到其他脚本中。
所以,现在,当我想访问配置变量时,我会调用如下内容:
myLib.myClass.getConfigVariable("theItemIWant")
在脚本中使用配置变量时,这变得非常难看。
所以我想简化对这些变量的访问。我可以使用字典,该字典在加载类时预先填充并执行以下操作:
myLib.myClass.config['theItemIWant']
但我的想法甚至更优雅一点。我编写了一个单独的 Config 类,我想提供对配置条目的变量级别访问。
所以我想要做的是:
myLib.Config().theItemIWant
或者在脚本中实例化一个对象,如下所示:
def myRoutine(self):
cfg = myLib.Config()
print cfg.theItemIWant
我读过有关实现此目的的丑陋(使用 exec)方法,实际上我对此很满意,但我不知道如何以这种方式设置 CLASS 级别变量。大多数人建议使用 exec 或更改变量或全局变量,但我不确定这是否可以直接在 Config 类上设置变量,而不是在其他地方。
使用 exec 失败:
SyntaxError: unqualified exec is not allowed in function '__init__' it contains a nested function with free variables
所以我认为做到这一点的唯一方法是改变 vars() 但我不确定这如何应用于类。
最佳答案
您可以简单地为您的配置对象实现 __getattr__()
函数,例如
def __getattr__(self, name):
if name in self.items:
return self.items[name]
else:
raise AttributeError()
参见here有关 python 文档中 __getattr__()
的说明。
关于python - 从变量设置类(自身)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323104/