instantiate all subclasses of a class

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Sun Jul 16 09:40:11 EDT 2006


In <mailman.8226.1153050094.27775.python-list at python.org>, Daniel Nogradi
wrote:

> More precisely I have a module m with some content:
> 
> # m.py
> class A:
>     pass
> class x( A ):
>     pass
> class y( A ):
>     pass
> # all kinds of other objects follow
> # end of m.py
> 
> and then in another module I have currently:
> 
> # n.py
> import m
> x = m.x( )
> y = m.y( )
> # end of n.py
> 
> and would like to automate this in a way that results in having
> instances of classes from m in n whose names are the same as the
> classes themselves. But I only would like to do this with classes that
> are subclasses of A.
> 
> Any ideas?

Just go through the objects in the module, test if they are classes,
subclasses of `A` and not `A` itself:

from inspect import isclass
import test

instances = dict()
for name in dir(test):
    obj = getattr(test, name)
    if isclass(obj) and issubclass(obj, test.A) and obj is not test.A:
        instances[name] = obj()




More information about the Python-list mailing list