class_docstr: The Extra Tree leaves change the way in which the splitters are updated
  (by using subsets of features).
  
  Parameters
  ----------
  stats
      Initial class observations.
  depth
      The depth of the node.
  splitter
      The numeric attribute observer algorithm used to monitor target statistics
      and perform split attempts.
  max_features
      Number of attributes per subset for each node split.
  seed
      Seed to ensure reproducibility.
  kwargs
      Other parameters passed to the learning node.
code: def __init__(
      self, stats, depth, splitter, max_features, seed, **kwargs
  ):
      super().__init__(stats, depth, splitter, **kwargs)
      self.max_features = max_features
      self.seed = seed
      self._rng = random.Random(self.seed)
      self.feature_indices = []
  
imports: from __future__ import annotations
  import random
  import typing
  from river.tree.nodes.htr_nodes import LeafAdaptive, LeafMean, LeafModel
  from river.tree.nodes.leaf import HTLeaf
label_desc: Use image node_id 1 to create a new ETLeaf object from inherited base classes: HTLeaf with example: obj = ETLeaf(stats, depth, splitter, max_features, seed)