docs: def _extract(self, item):
          """ Extracts a handler and handler's arguments that can be provided 
          as list or dictionary. If arguments are provided as list, they are 
          considered to have this sequence: (handler, memoize, timeout)                
          Examples:
              event += handler
              event += (handler, True, 1.5)
              event += {'handler':handler, 'memoize':True, 'timeout':1.5}
          """
          if not item:
              raise ValueError('Invalid arguments')
  
          handler = None
          memoize = False
          timeout = 0
  
          if not isinstance(item, (list, tuple, dict)):
              handler = item
          elif isinstance(item, (list, tuple)):
              if len(item) == 3:
                  handler, memoize, timeout = item
              elif len(item) == 2:
                  handler, memoize = item
              elif len(item) == 1:
                  handler = item
          elif isinstance(item, dict):
              handler = item.get('handler')
              memoize = item.get('memoize', False)
              timeout = item.get('timeout', 0)
          return handler, bool(memoize), float(timeout)