首页 > 后端开发 > Python教程 > 如何在Python中找到一个类的所有子类?

如何在Python中找到一个类的所有子类?

Patricia Arquette
发布: 2024-11-15 06:05:02
原创
528 人浏览过

How Can I Find All Subclasses of a Class in Python?

在 Python 中查找某个类的所有子类

要检索从 Python 中指定基类继承的所有类,请使用 __subclasses__()方法。此方法可用于扩展对象类的新式类(Python 3 中的默认值)。它的工作原理如下:

class Foo(object): pass
class Bar(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass

print([cls.__name__ for cls in Foo.__subclasses__()])
# ['Bar', 'Baz']

print(Foo.__subclasses__())
# [<class '__main__.Bar'>, <class '__main__.Baz'>]
登录后复制

要包含子子类,可以使用递归:

def all_subclasses(cls):
    return set(cls.__subclasses__()).union(
        [s for c in cls.__subclasses__() for s in all_subclasses(c)])

print(all_subclasses(Foo))
# {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
登录后复制

注意:尚未定义的子类(例如,由于未导入的模块)将不会被检测到__subclasses__().

使用类名称字符串定位子类:

当只有类名称作为字符串可用时,需要执行以下步骤:

  1. 使用类名查找类。
  2. 利用__subclasses__() 检索所定位类的子类。

从名称字符串查找类:

从名称查找类的方法字符串取决于其预期位置:

  • 如果预期在同一位置模块:

    cls = globals()[name]
    登录后复制
  • 如果需要在本地名称空间内:

    cls = locals()[name]
    登录后复制
  • 如果模块中的任何位置:

    import importlib
    modname, _, clsname = name.rpartition('.')
    mod = importlib.import_module(modname)
    cls = getattr(mod, clsname)
    登录后复制

一旦找到类,它的__subclasses__() 方法可用于检索所需的子类列表。

以上是如何在Python中找到一个类的所有子类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板