Subscriptable/Indexable generator
The most Pythonic solution would be to use itertools.islice from the standard library. For example, like this:

from itertools import islice

class Sliceable(object):
    """Sliceable(iterable) is an object that wraps 'iterable' and
    generates items from 'iterable' when subscripted. For example:

        &gt;&gt;&gt; from itertools import count, cycle
        &gt;&gt;&gt; s = Sliceable(count())
        &gt;&gt;&gt; list(s[3:10:2])
        [3, 5, 7, 9]
        &gt;&gt;&gt; list(s[3:6])
        [13, 14, 15]
        &gt;&gt;&gt; next(Sliceable(cycle(range(7)))[11])
        4
        &gt;&gt;&gt; s['string']
        Traceback (most recent call last):
            ...
        KeyError: 'Key must be non-negative integer or slice, not string'

    """
    def __init__(self, iterable):
        self.iterable = iterable

    def __getitem__(self, key):
        if isinstance(key, int) and key &gt;= 0:
            return islice(self.iterable, key, key + 1)
        elif isinstance(key, slice):
            return islice(self.iterable, key.start, key.stop, key.step)
        else:
            raise KeyError("Key must be non-negative integer or slice, not {}"
                           .format(key))


Note that I've given the class a better name, written a docstring, and provided some doctests.