Посты с тэгом setattr


Использование __setattr_.

Очень часто использую файл настроек для скрипта посредством модуля ConfigParser. И как-то немножко поднадоело писать в несколько строк каждый раз:

key = config.get("Basic","Key")
ns1 = config.get("Domains","NS1")
ns2 = config.get("Domains","NS2")

Короче, захотел я, чтобы доступ к настройкам выглядел примерно так: ns1 = config.Domains['ns1'], когда надо обратился к ней, вне зависимости от того, сколько настроек в файле. Самая хитрость – это сделать свойством класса секцию файла настроек. Именно для этого нужна функция __setattr__. Вот так у меня всё в итоге получилось:

class ConfigDict(object):
    def __init__(self,path):
        config = ConfigParser.RawConfigParser()
        config.read(path)
        for section in config.sections():
            dct = {}
            for option in config.options(section):
                dct[option] = config.get(section,option)
            self.__setattr__(section,dct)



Использование __setattr_.

Очень часто использую файл настроек для скрипта посредством модуля ConfigParser. И как-то немножко поднадоело писать в несколько строк каждый раз:

key = config.get("Basic","Key")
ns1 = config.get("Domains","NS1")
ns2 = config.get("Domains","NS2")

Короче, захотел я, чтобы доступ к настройкам выглядел примерно так: ns1 = config.Domains['ns1'], когда надо обратился к ней, вне зависимости от того, сколько настроек в файле. Самая хитрость – это сделать свойством класса секцию файла настроек. Именно для этого нужна функция __setattr__. Вот так у меня всё в итоге получилось:

class ConfigDict(object):
    def __init__(self,path):
        config = ConfigParser.RawConfigParser()
        config.read(path)
        for section in config.sections():
            dct = {}
            for option in config.options(section):
                dct[option] = config.get(section,option)
            self.__setattr__(section,dct)