<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def eval_single(self, key, data, data_store):
 """ Evaluate the value of a single parameter taking into account callables . Native types are not touched and simply returned, while callable methods are executed and their return value is returned. Args: key (str):
 The name of the parameter that should be evaluated. data (MultiTaskData):
 The data object that has been passed from the predecessor task. data_store (DataStore):
 The persistent data store object that allows the task to store data for access across the current workflow run. """

        if key in self:
            value = self[key]
            if value is not None and callable(value):
                return value(data, data_store)
            else:
                return value
        else:
            raise AttributeError()