code: def descendants(self, unroll=False, skip_not_present=True, in_post_order=False):
          
          for child in self.children(unroll, skip_not_present):
              if in_post_order:
                  yield from child.descendants(unroll, skip_not_present, in_post_order)
  
              yield child
  
              if not in_post_order:
                  yield from child.descendants(unroll, skip_not_present, in_post_order)
docs: Returns an iterator that provides nodes for all descendants of this
          component.
  
          Parameters
          ----------
          unroll : bool
              If True, any children that are arrays are unrolled.
  
          skip_not_present : bool
              If True, skips children whose 'ispresent' property is set to False
  
          in_post_order : bool
              If True, descendants are walked using post-order traversal
              (children first) rather than the default pre-order traversal
              (parents first).
  
          Yields
          ------
          :class:`~Node`
              All descendant nodes of this component