<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def merge(self, grid=None, merge_points=True, inplace=False, main_has_priority=True):
 """ Join one or many other grids to this grid. Grid is updated in-place by default. Can be used to merge points of adjcent cells when no grids are input. Parameters grid : vtk.UnstructuredGrid or list of vtk.UnstructuredGrids Grids to merge to this grid. merge_points : bool, optional Points in exactly the same location will be merged between the two meshes. inplace : bool, optional Updates grid inplace when True. main_has_priority : bool, optional When this parameter is true and merge_points is true, the scalar arrays of the merging grids will be overwritten by the original main mesh. Returns ------- merged_grid : vtk.UnstructuredGrid Merged grid. Returned when inplace is False. Notes ----- When two or more grids are joined, the type and name of each scalar array must match or the arrays will be ignored and not included in the final merged mesh. """

        append_filter = vtk.vtkAppendFilter()
        append_filter.SetMergePoints(merge_points)

        if not main_has_priority:
            append_filter.AddInputData(self)

        if isinstance(grid, vtki.UnstructuredGrid):
            append_filter.AddInputData(grid)
        elif isinstance(grid, list):
            grids = grid
            for grid in grids:
                append_filter.AddInputData(grid)

        if main_has_priority:
            append_filter.AddInputData(self)

        append_filter.Update()
        merged = _get_output(append_filter)
        if inplace:
            self.DeepCopy(merged)
        else:
            return merged