def create_descendent_prop(descendent_class):
  """Add descendent list accessor property inside an ActivityElement class
  definition.

  The property returns all the current element's descendents matching the
  tag name defined in the descendent class.

  Args:
    descendent_class (ActivityElement): Must be a subclass of :class:`ActivityElement`.
  Returns:
    property: accessor for underlying lxml element's descendent list.

  Examples:

    >>> class MyElement(ActivityElement):
    ...   my_prop = create_descendent_prop(MySubElement)
    ...   \"\"\"Property docstring goes here (if desired)\"\"\"
    ...   [...]

  """
  return property(
    lambda self: [
      descendent_class(e) 
      for e in self.elem.xpath(f'.//{descendent_class.TAG}')
    ],
    doc=f':obj:`list` of :class:`{descendent_class.__name__}`: '
    # f'All descendents of the contained lxml element with tag name '
    f'All element descendents with tag name "{descendent_class.TAG}".',
  )