docs: def set_id(self, dxid=None, name=None, alias=None):
          '''
          :param dxid: App ID
          :type dxid: string
          :param name: App name
          :type name: string
          :param alias: App version or tag
          :type alias: string
          :raises: :exc:`~dxpy.exceptions.DXError` if *dxid* and some other input are both given or if neither *dxid* nor *name* are given
  
          Discards the currently stored ID and associates the handler
          with the requested parameters.  Note that if *dxid* is given,
          the other fields should not be given, and if *name* is given,
          *alias* has default value "default".
  
          '''
          self._dxid = None
          self._name = None
          self._alias = None
          if dxid is not None:
              if name is not None or alias is not None:
                  raise DXError("Did not expect name or alias to be given if dxid is given")
              verify_string_dxid(dxid, self._class)
              self._dxid = dxid
          elif name is not None:
              self._name = name
              if not isinstance(name, basestring):
                  raise DXError("App name needs to be a string: %r" % (name,))
              if alias is not None:
                  if not isinstance(alias, basestring):
                      raise DXError("App alias needs to be a string: %r" % (alias,))
                  self._alias = alias
              else:
                  self._alias = 'default'