code: def astype(self, dtype):
          
          if dtype is None:
              # Need to filter this out since Numpy iterprets it as 'float'
              raise ValueError('`None` is not a valid data type')
  
          dtype = np.dtype(dtype)
          current_dtype = getattr(self, 'dtype', object)
  
          if dtype == current_dtype:
              return self
          else:
              return ProductSpace(*[space.astype(dtype)
                                    for space in self.spaces])
docs: Return a copy of this space with new ``dtype``.
  
          Parameters
          ----------
          dtype :
              Scalar data type of the returned space. Can be provided
              in any way the `numpy.dtype` constructor understands, e.g.
              as built-in type or as a string. Data types with non-trivial
              shapes are not allowed.
  
          Returns
          -------
          newspace : `ProductSpace`
              Version of this space with given data type.