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?
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 calledRule
, you could call: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:
Unfortunately,
issubclass
throwsTypeError
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.