def __getattr__(self, name):
        "Gets current value of attributes and unpacks if necessary."
        if '.' in name:
            head, tail = name.split('.', 1)
            return self[head][tail]
        if name not in self.__defaults:
            raise AttributeError(name)
        if name in self.__changes:
            return self.__changes[name].value
        attr = self.__defaults[name]
        if isinstance(attr, Parameter):
            return attr.value
        return attr
Gets current value of attributes and unpacks if necessary.
recipes/Python/578173_Settings_Organizer/recipe-578173.py