'Get an as-yet undefined attribute value.
This calls the get() function that was passed to the
constructor.  The result is stored as an instance variable so
that the next time the same attribute is requested,
__getattr__() won\'t be invoked.
If the get() function raises an exception, this is simply
passed on -- exceptions are not cached.'

def __getattr__(self, name):

    attribute = self._get_(name)
    self.__dict__[name] = attribute
    return attribute
