code: def cursor(self, *cursors):
          
          self._ensure_alive()
          self._last_usage = self._loop.time()
          try:
              if cursors and \
                      any(not issubclass(cursor, Cursor) for cursor in cursors):
                  raise TypeError('Custom cursor must be subclass of Cursor')
          except TypeError:
              raise TypeError('Custom cursor must be subclass of Cursor')
          if cursors and len(cursors) == 1:
              cur = cursors[0](self, self._echo)
          elif cursors:
              cursor_name = ''.join(map(lambda x: x.__name__, cursors)) \
                  .replace('Cursor', '') + 'Cursor'
              cursor_class = type(cursor_name, cursors, {})
              cur = cursor_class(self, self._echo)
          else:
              cur = self.cursorclass(self, self._echo)
          fut = self._loop.create_future()
          fut.set_result(cur)
          return _ContextManager(fut)
docs: Instantiates and returns a cursor
  
          By default, :class:`Cursor` is returned. It is possible to also give a
          custom cursor through the cursor_class parameter, but it needs to
          be a subclass  of :class:`Cursor`
  
          :param cursor: custom cursor class.
          :returns: instance of cursor, by default :class:`Cursor`
          :raises TypeError: cursor_class is not a subclass of Cursor.