getattr should raise a AttributeError when value is not found, not KeyError, which is raised when getitem fails. New function should look like
class ElementsCallbackData(dict):
slots = ()
def __getattr__(self, value):
try:
return self.__getitem__(value)
except:
raise AttributeError