code: def _get_selected_columns(self, op: OperandType) -> List[str]:
      columns = (
          op.col_names
          if isinstance(op.col_names, list)
          else [op.col_names]
      )
      return self._merge_selected_columns(columns, op)
  
file_path: mars/mars/optimization/logical/common/column_pruning.py
imports: from abc import ABCMeta, abstractmethod
  from typing import Any, List
  from ..core import OperandBasedOptimizationRule, OptimizationRecord, OptimizationRecordType
  from ....core import OperandType, TileableType, CHUNK_TYPE
  from ....dataframe.datasource.core import ColumnPruneSupportedDataSourceMixin
  from ....dataframe.utils import parse_index
  from ....utils import implements
label_desc: Use image node_id 2 for calling the GetitemPruneDataSource obj's underlying member method code with example usage: obj._get_selected_columns(op) and returns: self