class_docstr: Dispatches events which attached plugins can react to.
docstr: Initialize a `Pluggable`.
  
  Args:
      plugins: Plugins which should be attached to this `Pluggable`.
docstr_tok: ["Initialize","a","`","Pluggable","`",".","Args",":","plugins",":","Plugins","which","should","be","attached","to","this","`","Pluggable","`","."]
code: def __init__(self, *, plugins: Sequence[PluginArgument] = []) -> None:
      """Initialize a `Pluggable`.
  
      Args:
          plugins: Plugins which should be attached to this `Pluggable`.
      """
      self._hook_handles: Dict[
          EventIdenifier, Dict[HookHandleId, HookHandle]
      ] = defaultdict(dict)
  
      self._hook_handle_id_counter = count()
  
      self._plugins: List[BasePlugin] = []
  
      # This flag tracks, whether an event is currently being processed (otherwise it is added to the queue)
      self._processing_events = False
      self._event_queue: Queue = Queue()
  
      for plugin in plugins:
          if isclass(plugin):
              # instantiate plugin
              plugin = plugin()
  
          plugin = cast("BasePlugin", plugin)
          plugin.attach_to(self)
  
imports: import logging
  from collections import defaultdict
  from inspect import isclass, signature
  from itertools import count
  from queue import Queue
  from typing import Any, Callable, Dict, Iterator, List, NewType, Optional, Sequence, Set, Type, Union, cast
label_desc: Use image node_id 1 to create a new Pluggable object  with example: obj = Pluggable()