class_docstr: An :class:`OutputTag` is a typed and named tag to use for tagging side outputs of an operator.
  
  Example:
  ::
  
      # Explicitly specify output type
      >>> info = OutputTag("late-data", Types.TUPLE([Types.STRING(), Types.LONG()]))
      # Implicitly wrap list to Types.ROW
      >>> info_row = OutputTag("row", [Types.STRING(), Types.LONG()])
      # Implicitly use pickle serialization
      >>> info_side = OutputTag("side")
      # ERROR: tag id cannot be empty string (extra requirement for Python API)
      >>> info_error = OutputTag("")
code: def __init__(
      self,
      tag_id: str,
      type_info: Optional[Union[TypeInformation, list]] = None,
  ):
      if not tag_id:
          raise ValueError(
              "OutputTag tag_id cannot be None or empty string"
          )
      self.tag_id = tag_id
  
      if type_info is None:
          self.type_info = Types.PICKLED_BYTE_ARRAY()
      elif isinstance(type_info, list):
          self.type_info = RowTypeInfo(type_info)
      elif not isinstance(type_info, TypeInformation):
          raise TypeError(
              "OutputTag type_info must be None, list or TypeInformation"
          )
      else:
          self.type_info = type_info
  
      self._j_output_tag = None
  
file_path: flink/flink-python/pyflink/datastream/output_tag.py
imports: from typing import Optional, Union
  from pyflink.common.typeinfo import TypeInformation, Types, RowTypeInfo
  from pyflink.java_gateway import get_gateway
label_desc: Use image node_id 1 to create a new OutputTag object from inherited base classes: object with example: obj = OutputTag(tag_id, type_info)