code: def fire(obj, name, *args, **kwargs):
      
      signals = vars(obj).get('_signals', {})
      for func in signals.get(name, ()):
          func(*args, **kwargs)
docs: Arrange for `func(*args, **kwargs)` to be invoked for every function
      registered for the named signal on `obj`.