动态地将嵌套属性分配给Python

时间:2017-10-20 17:27:34

标签: python properties attributes class-attributes

我有一个配置文件,并且想要创建一个Config类,该类具有配置文件中不同部分和值的属性。

例如,我有一个yaml文件(虽然json也可以),设置如下:

section1:
    key1: value1
    key2: value2

section2:
    key1: value1

我希望能够通过调用类来检索属性,如下所示:Config.section1.key1

将来可能需要添加到此文件中,因此我希望能够使用yaml文件中的任何其他元素更新Config类。

我可以使用以下内容成功将节名称分配给实例化对象:

class Config(object):
    def __init__(self):
        with open("config.yml", 'r') as ymlfile:
            cfg = yaml.load(ymlfile)

        for section in cfg.items():
            setattr(self, section[0], section[1])

这使得以下工作正常:

config = Config()
print(config.section1)

但我不能对Config类本身做同样的事情。

我也无法弄清楚如何存储嵌套属性。我试过这个:

for section in cfg.items():
    setattr(self, section[0], section[1])
    for key in section[1]:
        setattr(section, key, section[1][key])

但它只是返回以下错误:

Traceback (most recent call last):
  File "config_so.py", line 13, in <module>
    config = Config()
  File "config_so.py", line 12, in __init__
    setattr(section, key, section[1][key])
AttributeError: 'tuple' object has no attribute 'server'

0 个答案:

没有答案