Determine the interval of overlap between this range and another.

        :returns: a new Range object representing the overlapping interval,
                  or `None` if the ranges do not overlap.

def intersect(self, other):
        """
        Determine the interval of overlap between this range and another.

        :returns: a new Range object representing the overlapping interval,
                  or `None` if the ranges do not overlap.
        """
        if not self.overlap(other):
            return None

        newstart = max(self._start, other.start)
        newend = min(self._end, other.end)
        return Range(newstart, newend)