class_docstr: Handles parameter management for estimators composed of named estimators.
  
  Partly adapted from sklearn utils.metaestimator.py.
code: def _set_params(self, attr, **params):
      # Ensure strict ordering of parameter setting:
      # 1. All steps
      if attr in params:
          setattr(self, attr, params.pop(attr))
      # 2. Step replacement
      items = getattr(self, attr)
      names = []
      if items and isinstance(items, (list, tuple)):
          names = list(zip(*items))[0]
      for name in list(params.keys()):
          if "__" not in name and name in names:
              self._replace_estimator(attr, name, params.pop(name))
      # 3. Step parameters and other initialisation arguments
      super().set_params(**params)
      return self
  
imports: from inspect import isclass
  import numpy
  import pandas
  from sktime.base import BaseEstimator
label_desc: Use image node_id 6 for calling the _HeterogenousMetaEstimator obj's underlying member method code with example usage: obj._set_params(attr) and returns: self