<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def descendants(self, unroll=False, skip_not_present=True, in_post_order=False):
 """ 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 """

        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)