python - 从变量设置类(自身)变量?

标签 python variables

这是糟糕的编程实践,是的,我知道,但这些脚本纯粹是我的,这种技术可以大大简化我的编码工作。

现在,我有一个 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/

相关文章:

python - 在 Python 中使用逗号抓取数据

Javascript文件读取器+变量范围中的问题

objective-c - 何时何地从任意消息返回值初始化外部变量?

python - 如何使用 python 从一个大文本文件创建 5 个小文本文件?

python - 如何在 matplotlib 中获取图例位置

javascript - 在 .attr() 中使用 JS 变量

javascript - 变量 x, y = 'foo' ;这能实现吗?

javascript - 是否有任何 DOMstring 元素未存储在新变量中以供进一步处理的原因?

Python/ADOX : 'The specified module could not be found.' (win32 extensions)

python - 如果满足条件,如何将两列添加或组合到数据框中的另一列中