code: def matches(self, *args, **kwargs):
          
          request = make_prototype_request(*args, **kwargs)
          if self._prototype.opcode not in (None, request.opcode):
              return False
          if self._prototype.is_command not in (None, request.is_command):
              return False
          for name in dir(self._prototype):
              if name.startswith('_') or name in request._non_matched_attrs:
                  # Ignore privates, and handle documents specially.
                  continue
              prototype_value = getattr(self._prototype, name, None)
              if inspect.ismethod(prototype_value):
                  continue
              actual_value = getattr(request, name, None)
              if prototype_value not in (None, actual_value):
                  return False
          if len(self._prototype.docs) not in (0, len(request.docs)):
              return False
  
          return self._prototype._matches_docs(self._prototype.docs, request.docs)
docs: Test if a request matches a :ref:`message spec <message spec>`.
  
          Returns ``True`` or ``False``.