class_docstr: Base class that is inherited by the majority of classes in River.
  
  This base class allows us to handle the following tasks in a uniform manner:
  
  - Getting and setting parameters
  - Displaying information
  - Mutating/cloning
docstr: Return the parameters that were used during initialization.
docstr_tok: ["Return","the","parameters","that","were","used","during","initialization","."]
code: def _get_params(self) -> dict[str, typing.Any]:
      """Return the parameters that were used during initialization."""
  
      params = {}
  
      for name, param in inspect.signature(self.__init__).parameters.items():  # type: ignore
          # *args
          if param.kind == param.VAR_POSITIONAL:
              if positional_args := getattr(self, name, []):
                  params["_POSITIONAL_ARGS"] = positional_args
              continue
  
          # **kwargs
          if param.kind == param.VAR_KEYWORD:
              for k, v in getattr(self, name, {}).items():
                  if isinstance(v, Base):
                      params[k] = (v.__class__, v._get_params())
                  else:
                      params[k] = v
              continue
  
          # Keywords parameters
          attr = getattr(self, name)
          if isinstance(attr, Base):
              params[name] = (attr.__class__, attr._get_params())
          else:
              params[name] = attr
  
      return params
  
imports: from __future__ import annotations
  import collections
  import contextlib
  import copy
  import inspect
  import itertools
  import logging
  import sys
  import types
  import typing
label_desc: Use image node_id 4 for calling the Base obj's underlying member method code with example usage: obj._get_params() and returns: params