code: def igetattr(self, attrname, context=None):
          
          if attrname == "start":
              yield self._wrap_attribute(self.lower)
          elif attrname == "stop":
              yield self._wrap_attribute(self.upper)
          elif attrname == "step":
              yield self._wrap_attribute(self.step)
          else:
              yield from self.getattr(attrname, context=context)
docs: Infer the possible values of the given attribute on the slice.
  
          :param attrname: The name of the attribute to infer.
          :type attrname: str
  
          :returns: The inferred possible values.
          :rtype: iterable(NodeNG)