Iterate over subclasses of a given class in a given module

前端 未结 4 808

In Python, given a module X and a class Y, how can I iterate or generate a list of all subclasses of Y that exist in module X?

4条回答
  •  心在旅途
    2020-12-15 21:11

    Given the module foo.py

    class foo(object): pass
    class bar(foo): pass
    class baz(foo): pass
    
    class grar(Exception): pass
    
    def find_subclasses(module, clazz):
        for name in dir(module):
            o = getattr(module, name)
    
            try: 
                 if issubclass(o, clazz):
                 yield name, o
            except TypeError: pass
    
    >>> import foo
    >>> list(foo.find_subclasses(foo, foo.foo))
    [('bar', ), ('baz', ), ('foo', )]
    >>> list(foo.find_subclasses(foo, object))
    [('bar', ), ('baz', ), ('foo', ), ('grar', )]
    >>> list(foo.find_subclasses(foo, Exception))
    [('grar', )]
    

提交回复
热议问题