Итак, у меня есть этот класс:
import yaml
class Config():
def __init__(self, filename):
self.config_filename=filename
def __read_config_file(self):
with open(self.config_filename) as f:
self.cfg = yaml.safe_load(f)
def get(self):
self.__read_config_file()
return self.cfg
И он отлично работает. Идея заключается в том, чтобы принудительно перечитывать файл конфигурации каждый раз, когда я что-то использую в конфигурации. Вот пример использования:
cfg = Config('myconfig.yaml')
for name in cfg.get()['persons']:
print (cfg.get()['persons'][name]['phone'])
print (cfg.get()['persons'][name]['address'])
Это работает, но я думаю, что это выглядит крайне некрасиво. Я мог бы сделать что-то вроде этого:
c = cfg.get()['persons']
for name in c:
print (c['persons'][name]['phone'])
print (c['persons'][name]['address'])
Это выглядит немного лучше, но я также теряю возможность перезагрузки при доступе, но я хочу сделать что-то это (что, очевидно, не работает ):
for name in c:
print (name['phone'])
print (name['address'])
Похоже, что я чего-то не понимаю в итерациях по словарям, но меня больше всего беспокоит то, что я хочу перезагружать файл конфигурации каждый раз, когда используется какое-либо значение из этого файла, и я хочу, чтобы это было хорошо читаемым. Итак, как я могу это изменить?
Пример файла конфигурации. При необходимости здесь можно изменить формат.
persons:
john:
address: "street A"
phone: "123"
george:
address: "street B"
phone: "456"