Initialize all the classes in a module into nameless objects in a list
Question: Is there a way to initialize all classes from a python module into a list of
nameless objects?

**Example** I have a module `rules` which contains all child classes from a
class Rule. Because of that, I'm certain they will all implement a method
`run()` and will have a attribute `name` which will be generated during the
call of `__init__`

I would like to have a list of objects dynamically initiated from those
classes. By dynamically initialized i mean that they don't have to be named
explicitly.

The questions are:

Is it possible to iterate through all classes in a module?

Can a nameless object be initiated?


Answer: There are at least two approaches you can take. You can get all of the
subclasses of a class by calling a class's `__subclasses__()` method. So if
your parent class is called `Rule`, you could call:

    
    
    rule_list = [cls() for cls in Rule.__subclasses__()]
    

This will give you all subclasses of `Rule`, and will not limit them to the
ones found in a particular module.

If you have a handle to your module, you can iterate over its content. Like
so:

    
    
    import rule
    rule_list = []
    for name in dir(rule):
        value = getattr(rule, name)
        if isinstance(value, type) and issubclass(value, Rule):
            rule_list.append(value())
    

Unfortunately, `issubclass` throws `TypeError` if you give it an object that
is not a class as its first argument. So you have to handle that somehow.

EDIT: dealing with the `issubclass` quirk per @Blckknght's suggestion.

