如何在Python中找到给定类的子类?

DDD
发布: 2024-11-16 01:39:03
原创
886 人浏览过

How can I find the subclasses of a given class in Python?

在 Python 中查找类的子类

在 Python 中,您可以通过给定类的 __subclasses__( ) 方法。此方法适用于新式类,这些类继承自“object”类,在 Python 3 中常用。

获取子类的名称:

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

[cls.__name__ for cls in Foo.__subclasses__()]
# ['Bar', 'Baz']
登录后复制

或者,要检索子类本身:

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

要确认基类关联:

for cls in Foo.__subclasses__():
    print(cls.__base__)
# <class '__main__.Foo'>
# <class '__main__.Foo'>
登录后复制

递归子类检索:

如果如果您需要捕获子子类(孙子等),则需要递归方法:

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

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

注意:如果子类的类定义尚未执行(例如,其模块为未导入),它不会被 __subclasses__() 检测到。

从类名获取子类:

假设您有类名改为字符串。在这种情况下,请按照以下步骤操作:

  1. 使用类名称查找类对象:

    • 如果在同一模块中:

      cls = globals()[name]
      登录后复制
    • 如果在任何模块中:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
      登录后复制
  2. 使用 __subclasses__() 获取子类检索到的类对象。

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

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