Python: доступ к значениям YAML с использованием «точечной нотации»

Я использую файл конфигурации YAML. Так вот код для загрузки моей конфигурации в Python:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)

Этот код фактически создает словарь. Теперь проблема в том, что для доступа к значениям мне нужно использовать множество скобок.

YAML:

mysql:
    user:
        pass: secret

Python:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)
print(config['mysql']['user']['pass']) # <--

Я бы предпочел что-то подобное (точечная запись):

config('mysql.user.pass')

Итак, моя идея - использовать интерфейс рендеринга PyStache ().

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)

import pystache
def get_config_value( yml_path, config ):
    return pystache.render('{{' + yml_path + '}}', config)

get_config_value('mysql.user.pass', config)

Это было бы "хорошим" решением? Если нет, что было бы лучшей альтернативой?

Дополнительный вопрос [решено]

Я решил использовать решение Ильи Эверила. Но теперь у меня есть дополнительный вопрос: как бы вы создали класс-оболочку Config вокруг DotConf?

Следующий код не работает, но я надеюсь, вы поняли, что я пытаюсь сделать:

class Config( DotDict ):
    def __init__( self ):
        with open('./config.yml') as file:
            DotDict.__init__(yaml.safe_load(file))

config = Config()
print(config.django.admin.user)

Ошибка:

AttributeError: 'super' object has no attribute '__getattr__'

Решение

Вам просто нужно пройтиself конструктору суперкласса.

DotDict.__init__(self, yaml.safe_load(file))

Еще лучшее решение (Илья Эвериля)

super().__init__(yaml.safe_load(file))

Ответы на вопрос(4)

Ваш ответ на вопрос