Indexable Class

We require to implement __getitem__ method to make class indexable.

class A:
    def __init__(self):
        self.items = [1, 2, 3, 4]
    def __getitem__(self, i):
        if i >= len(self.items):
            raise IndexError
        return self.items[i]

Now, we can use instance of class A with for loop.

a = A()
 
for i in a:
    print(i)

for loop works both with iterable and indexable objects. In case of indexable objects, it waits for IndexError exception to stop and in the case of iterable, it requires StopIteration.