在Python中,给定模块X和类Y,如何迭代或生成模块X中存在的Y的所有子类的列表?
虽然Quamrana的建议工作得很好,但我想提出一些可能的改进,以使其更加pythonic.他们依赖于使用标准库中的inspect模块.
您可以使用避免getattr调用 inspect.getmembers()
使用可以避免try/catch inspect.isclass()
有了这些,如果您愿意,可以将整个事情简化为单个列表理解:
def find_subclasses(module, clazz): return [ cls for name, cls in inspect.getmembers(module) if inspect.isclass(cls) and issubclass(cls, clazz) ]
这是一种方法:
import inspect def get_subclasses(mod, cls): """Yield the classes in module ``mod`` that inherit from ``cls``""" for name, obj in inspect.getmembers(mod): if hasattr(obj, "__bases__") and cls in obj.__bases__: yield obj