在 Python 中按名称查找类的子类
问题:
如何检索所有类
解决方案:
Python 提供了一种优雅的方法,可以通过名称查找指定类的子类。通过 __subclasses__ 方法,你可以直接检索一个类的子类。
代码说明:
假设你有一个名为 Foo 的基类,其子类为 Bar、Baz、和 Bing,以下代码片段说明了 __subclasses__ 的用法:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass # Get the subclasses of Foo foo_subclasses = Foo.__subclasses__() print("Subclass names:", [cls.__name__ for cls in foo_subclasses]) print("Subclasses themselves:", Foo.__subclasses__()) # Validate that the subclasses inherit from Foo for cls in Foo.__subclasses__(): print("Base class of {}: {}".format(cls, cls.__base__))
输出:
Subclass names: ['Bar', 'Baz'] Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>] Base class of <class '__main__.Bar'>: <class '__main__.Foo'> Base class of <class '__main__.Baz'>: <class '__main__.Foo'>
查找子子类:
如果需要要查找子子类,您可以使用递归函数:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
注意:
需要注意的是,为了使 __subclasses__ 有效工作,子类的类定义之前一定已经执行过。如果您有一个表示类名的字符串,您可以首先使用 globals()、locals() 或 importlib 等技术检索该类。
以上是如何在 Python 中按名称检索类的子类?的详细内容。更多信息请关注PHP中文网其他相关文章!