0

構成ファイルがあり、さまざまなセクションの属性と構成ファイルの値を持つ 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'
4

0 に答える 0