def METHOD_NAME(self, *args, **kwargs):
    if not getattr(self, '_loaded', False):
        # This block is executed on the first call to the function.
        # The return value of the call is saved an attribute on the wrapper
        # for future invocations.
        self._return = func(self, *args, **kwargs)
        self._loaded = True
        _pluginLoadOrder.append(self.name)
        logprint.success('Loaded plugin "%s"' % self.name)
    return self._return