code: def represent_object(self, data):
      # We use __reduce__ API to save the data. data.__reduce__ returns
      # a tuple of length 2-5:
      #   (function, args, state, listitems, dictitems)
  
      # For reconstructing, we calls function(*args), then set its state,
      # listitems, and dictitems if they are not None.
  
      # A special case is when function.__name__ == '__newobj__'. In this
      # case we create the object with args[0].__new__(*args).
  
      # Another special case is when __reduce__ returns a string - we don't
      # support it.
  
      # We produce a !!python/object, !!python/object/new or
      # !!python/object/apply node.
  
      cls = type(data)
      if cls in copyreg.dispatch_table:
          reduce = copyreg.dispatch_table[cls](data)
      elif hasattr(data, "__reduce_ex__"):
          reduce = data.__reduce_ex__(2)
      elif hasattr(data, "__reduce__"):
          reduce = data.__reduce__()
      else:
          raise RepresenterError("cannot represent an object", data)
      reduce = (list(reduce) + [None] * 5)[:5]
      function, args, state, listitems, dictitems = reduce
      args = list(args)
      if state is None:
          state = {}
      if listitems is not None:
          listitems = list(listitems)
      if dictitems is not None:
          dictitems = dict(dictitems)
      if function.__name__ == "__newobj__":
          function = args[0]
          args = args[1:]
          tag = "tag:yaml.org,2002:python/object/new:"
          newobj = True
      else:
          tag = "tag:yaml.org,2002:python/object/apply:"
          newobj = False
      function_name = "%s.%s" % (function.__module__, function.__name__)
      if (
          not args
          and not listitems
          and not dictitems
          and isinstance(state, dict)
          and newobj
      ):
          return self.represent_mapping(
              "tag:yaml.org,2002:python/object:" + function_name, state
          )
      if (
          not listitems
          and not dictitems
          and isinstance(state, dict)
          and not state
      ):
          return self.represent_sequence(tag + function_name, args)
      value = {}
      if args:
          value["args"] = args
      if state or not isinstance(state, dict):
          value["state"] = state
      if listitems:
          value["listitems"] = listitems
      if dictitems:
          value["dictitems"] = dictitems
      return self.represent_mapping(tag + function_name, value)
  
imports: from .error import *
  from .nodes import *
  import datetime, copyreg, types, base64, collections
label_desc: Use image node_id 5 for calling the Representer obj's underlying member method code with example usage: obj.represent_object(data) and returns: self, self, self