class_docstr: Components that take parameters. This also provides an internal
  param map to store parameter values attached to the instance.
  
  .. versionadded:: 1.3.0
docstr: Explains a single param and returns its name, doc, and optional
  default value and user-supplied value in a string.
docstr_tok: ["Explains","a","single","param","and","returns","its","name",",","doc",",","and","optional","default","value","and","user-supplied","value","in","a","string","."]
code: def explainParam(self, param: Union[str, Param]) -> str:
      """
      Explains a single param and returns its name, doc, and optional
      default value and user-supplied value in a string.
      """
      param = self._resolveParam(param)
      values = []
      if self.isDefined(param):
          if param in self._defaultParamMap:
              values.append(
                  "default: %s" % self._defaultParamMap[param]
              )
          if param in self._paramMap:
              values.append("current: %s" % self._paramMap[param])
      else:
          values.append("undefined")
      valueStr = "(" + ", ".join(values) + ")"
      return "%s: %s %s" % (param.name, param.doc, valueStr)
  
imports: import array
  from abc import ABCMeta
  import copy
  from typing import Any, Callable, Generic, List, Optional, overload, TypeVar, Union, TYPE_CHECKING
  import numpy
  from py4j.java_gateway import JavaObject
  from pyspark.ml.linalg import DenseVector, Vector, Matrix
  from pyspark.ml.util import Identifiable
label_desc: Use image node_id 4 for calling the Params obj's underlying member method code with example usage: obj.explainParam(param) and returns: unknown