event_name := {'created', 'modified', 'deleted'}, list, tuple

        Attaches a function to run to a particular event. The function must be
        unique to be removed cleanly. Alternatively, event_name can be an list/
        tuple if any of the string possibilities to be added on multiple events

def observe(self, event_name, func):
        """
        event_name := {'created', 'modified', 'deleted'}, list, tuple

        Attaches a function to run to a particular event. The function must be
        unique to be removed cleanly. Alternatively, event_name can be an list/
        tuple if any of the string possibilities to be added on multiple events
        """
        if isinstance(event_name, list) or isinstance(event_name, tuple):
            for name in event_name:
                self.observe(name, func)
            return
        self.log(func.__name__, "attached to", event_name)
        self._modify_event(event_name, 'append', func)