code: def _get_or_add_definition(self):
          
          # ---note this method is called recursively to access inherited definitions---
          # ---case-1: definition is not inherited---
          if self._has_definition:
              return self._definition
          # ---case-2: definition is inherited and belongs to second-or-later section---
          prior_headerfooter = self._prior_headerfooter
          if prior_headerfooter:
              return prior_headerfooter._get_or_add_definition()
          # ---case-3: definition is inherited, but belongs to first section---
          return self._add_definition()
docs: Return HeaderPart or FooterPart object for this section.
  
          If this header/footer inherits its content, the part for the prior header/footer
          is returned; this process continue recursively until a definition is found. If
          the definition cannot be inherited (because the header/footer belongs to the
          first section), a new definition is added for that first section and then
          returned.