Trying to generate a list of the subclasses of C

Pierre Barbier de Reuille pierre_dot_barbier at _nospam_cirad.fr
Mon Jan 16 09:59:41 EST 2006


Charles Krug a écrit :
> List:
> 
> I have this:
> 
> # classC.py
> 
> class C(object): pass
> 
> class D(C): pass
> 
> class E(C): pass
> 
> def CSubclasses():
>     for name in dir(): pass
> 
> I'm trying to create a list of all of C's subclasses:
> 
> import classC
> 
> print C
> aList = []
> for name in dir(classC):
>     print name,
>     try:
>         if issubclass(classC.__dict__[name], C):
>             print classC.__dict__[name]
>         else:
>             print
>     except TypeError:
>         print
> 

Where is C defined ?

>>> import classC

does not define the name C in the current scope ... thus, you should write :

for name in dir(classC):
    print name,
    try:
        if issubclass(classC.__dict__[name], classC.C):
            print classC.__dict__[name]
        else:
            print
    except TypeError:
        print

and it gives :

C <class 'test_subclass.C'>
CSubclasses
D <class 'test_subclass.D'>
E <class 'test_subclass.E'>
__builtins__
__doc__
__file__
__name__

... which is exactly what you want !

Pierre

> Which gives me this:
> 
> <class '__main__.C'>
> C
> CSubclasses
> D
> E
> __builtins__
> __doc__
> __file__
> __name__
> 
> However when I do this from the command line:
> 
> 
>>>>issubclass(D,C)
> 
> True
> 
> but
> 
> 
>>>>issubclass(classC.__dict__['D'], C)
> 
> False
> 
> So my approach is flawed.
> 
> The end result I'm after is an automatically generated dictionary
> containing instaces of the subclasses keyed by the subclass names:
> 
> {'D':D(), 'E':E(), . . . }
> 
> I can see the information I need in the module's __dict__ and by using
> the dir() method, but I'm not having much success extracting it.
> 
> 
> 



More information about the Python-list mailing list