首页  >  文章  >  后端开发  >  如何找到Python类的所有子类?

如何找到Python类的所有子类?

Patricia Arquette
Patricia Arquette原创
2024-11-17 09:50:03154浏览

How Can I Find All Subclasses of a Python Class?

访问类的子类

在Python中,查找给定类的所有子类可以通过__subclasses__方法来实现。此方法适用于新式类(从 Python 3 中的对象继承或从新式类继承的类)。

例如,考虑以下代码:

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

要检索 Foo 的子类,我们可以使用以下代码:

print([cls.__name__ for cls in Foo.__subclasses__()])

这将打印 Foo 的子类的名称子类:

['Bar', 'Baz']

我们还可以使用 __subclasses__() 获取子类本身:

print(Foo.__subclasses__())

这将打印以下子类列表:

[<class '__main__.Bar'>, <class '__main__.Baz'>]

为了确认这些子类确实以 Foo 作为基类,我们可以使用以下内容code:

for cls in Foo.__subclasses__():
    print(cls.__base__)

这会打印以下内容:

<class '__main__.Foo'>
<class '__main__.Foo'>

但是需要注意的是,如果子类的类定义还没有被执行,则不会由 __subclasses__ 发现。为了解决这个问题,可以采用递归:

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'>}

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn