code: def Introspect(self, object_path, connection):
          '''Return XML description of this object's interfaces, methods and signals.
          This wraps dbus-python's Introspect() method to include the dynamic
          methods and properties.
          '''
          cls = self.__class__.__module__ + '.' + self.__class__.__name__
          orig_interfaces = self._dbus_class_table[cls]
          mock_interfaces = orig_interfaces.copy()
          for interface, methods in self.methods.items():
              for method in methods:
                  mock_interfaces.setdefault(interface, {})[method] = self.methods[interface][method][3]
          self._dbus_class_table[cls] = mock_interfaces
          xml = dbus.service.Object.Introspect(self, object_path, connection)
          tree = ElementTree.fromstring(xml)
          for name in self.props:
              interface = tree.find(".//interface[@name='%s']" % name)
              if interface is None:
                  interface = ElementTree.Element("interface", {"name": name})
                  tree.append(interface)
              for prop, val in self.props[name].items():
                  if val is None:
                      continue
                  elem = ElementTree.Element("property", {
                      "name": prop,
                      "type": dbus.lowlevel.Message.guess_signature(val),
                      "access": "readwrite"})
                  interface.append(elem)
          xml = ElementTree.tostring(tree, encoding='utf8', method='xml').decode('utf8')
          self._dbus_class_table[cls] = orig_interfaces
          return xml