docs: def findVars(self):
          """
          Returns the dict of model variables, as follows:
  
          --each getProperty() and isProperty() getter method
            is called, and a "property" key is added to the result
  
          --variables set via setVar() are added to the result,
            overwriting any value already provided by a getter
  
          The variables can be cached, to avoid further processing,
          by setting the related constructor parameter: in this case,
          findVars() returns a copy of the cached vars dictionary.
          """
          if self._cacheVars and (self._vars is not None):
              return dict(self._vars)
  
          result = {}
  
          for itemName in map(str, dir(self)):
              match = self._getterPattern.match(itemName)
  
              if match is None:
                  continue
  
              propertyName = match.group(1)
              varName = propertyName[0].lower() + propertyName[1:]
  
              varValue = getattr(self, itemName)()
  
              result[varName] = varValue
  
          result.update(self._explicitVars)
  
          result["vars"] = result
  
          if self._cacheVars:
              self._vars = dict(result)
  
          return result