<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_settings(self, settings):
 """Update the settings If a derived class has an ALLOWED_SETTINGS dict, we check here that incoming settings from the web app are allowed, and set the child properties as appropriate. """


        def error_string(setting, setting_val):
            return ('{val} is not an acceptable value for '
                    'parameter {param} for visualization'
                    '{vis}.').format(val=setting_val,
                                     param=setting,
                                     vis=self.__class__.__name__)

        for setting in settings:
            if settings[setting] in self.ALLOWED_SETTINGS[setting]:
                # if the setting is allowed, set the attribute but remove
                # invalid variable characters
                #
                # see:
                #
                # https://stackoverflow.com/questions/3303312/how-do-i-convert-a-string-to-a-valid-variable-name-in-python
                setattr(self, '_' + re.sub('\W|^(?=\d)', '_', setting).lower(),
                        settings[setting])
            else:
                raise ValueError(error_string(settings[setting], setting))