docs: def open(self):
          '''Initialises connection to q service.
          
          If the connection hasn't been initialised yet, invoking the 
          :func:`.open` creates a new socket and performs a handshake with a q 
          service.
          
          :raises: :class:`.QConnectionException`, :class:`.QAuthenticationException` 
          '''
          if not self._connection:
              if not self.host:
                  raise QConnectionException('Host cannot be None')
  
              self._init_socket()
              self._initialize()
  
              self._writer = self._writer_class(self._connection, protocol_version = self._protocol_version, encoding = self._encoding)
              self._reader = self._reader_class(self._connection_file, encoding = self._encoding)