docs: def get_value_generator(self_,name): # pylint: disable-msg=E0213
          """
          Return the value or value-generating object of the named
          attribute.
  
          For most parameters, this is simply the parameter's value
          (i.e. the same as getattr()), but Dynamic parameters have
          their value-generating object returned.
          """
          cls_or_slf = self_.self_or_cls
          param_obj = cls_or_slf.param.objects('existing').get(name)
  
          if not param_obj:
              value = getattr(cls_or_slf,name)
  
          # CompositeParameter detected by being a Parameter and having 'attribs'
          elif hasattr(param_obj,'attribs'):
              value = [cls_or_slf.param.get_value_generator(a) for a in param_obj.attribs]
  
          # not a Dynamic Parameter
          elif not hasattr(param_obj,'_value_is_dynamic'):
              value = getattr(cls_or_slf,name)
  
          # Dynamic Parameter...
          else:
              internal_name = "_%s_param_value"%name
              if hasattr(cls_or_slf,internal_name):
                  # dealing with object and it's been set on this object
                  value = getattr(cls_or_slf,internal_name)
              else:
                  # dealing with class or isn't set on the object
                  value = param_obj.default
  
          return value