访问类的子类
在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中文网其他相关文章!