class_docstr: The query objects are constructed on the client.
code: def _set_post_processing(
      self, post_processing: list[dict[str, Any] | None] | None
  ) -> None:
      post_processing = post_processing or []
      self.post_processing = [
          post_proc for post_proc in post_processing if post_proc
      ]
  
imports: from __future__ import annotations
  import json
  import logging
  from datetime import datetime
  from pprint import pformat
  from typing import Any, NamedTuple, TYPE_CHECKING
  from flask import g
  from flask_babel import gettext
  from pandas import DataFrame
  from superset import feature_flag_manager
  from superset.common.chart_data import ChartDataResultType
  from superset.exceptions import InvalidPostProcessingError, QueryClauseValidationException, QueryObjectValidationError
  from superset.sql_parse import sanitize_clause
  from superset.superset_typing import Column, Metric, OrderBy
  from superset.utils import pandas_postprocessing
  from superset.utils.core import DTTM_ALIAS, find_duplicates, get_column_names, get_metric_names, is_adhoc_metric, json_int_dttm_ser, QueryObjectFilterClause
  from superset.utils.hashing import md5_sha_from_dict
label_desc: Use image node_id 5 for calling the QueryObject obj's underlying member method code with example usage: obj._set_post_processing(post_processing) without return types