Is it possible to make a module iterable in Python?
Question: I am making a module that I want to treat as a static container of objects.
These objects are of a class type that I have defined. I want to be able to
import this module and then loop over the objects within. Here is some code
explaining what I mean:

**example.py**

    
    
    class MyExampleClass(object):
        def __init__(self, var1, var2, var3):
            self.var1 = var1
            self.var2 = var2
            self.var3 = var3
            self.var4 = var4
    
    instanceA = MyExampleClass(1, 2, 3, 4)
    instanceB = MyExampleClass(4, 3, 6, 7)
    instanceC = MyExampleClass(5, 3, 4, 5)
    
    # something like this
    def __iter__():
        return (instanceA, instanceB, instanceC)
    

Then I would like to be able to import this and use it like an enum:

    
    
    import example
    
    for e in example:
       # do stuff with e
    

Is this possible to do in Python? Or will I have to import a list from within
the `example` package?

**example.py**

    
    
    objects = (instanceA, instanceB, instanceC)
    

and then

    
    
    import example
    
    for e in example.objects:
        # do stuff with e
    


Answer: You can achieve that by defining a root class in your module and replacing the
module with an instance of that class. Here is an example:

    
    
    class ModuleClass(object):
        __init__(self):
            self.instanceA = MyExampleClass(1, 2, 3, 4)
            ...
    
        __iter__(self):
            # Your iterator logic here
    
    # and then in the same module code
    sys.modules[__name__] = ModuleClass()
    

So then you can do what you want, because when you import that module, it will
actually be an instance of your custom iterable `ModuleClass`:

    
    
    import example
    
    for e in example:
       # do stuff with e
    

