在 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__() 检测到。
从类名获取子类:
假设您有类名改为字符串。在这种情况下,请按照以下步骤操作:
使用类名称查找类对象:
如果在同一模块中:
cls = globals()[name]
如果在任何模块中:
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
以上是如何在Python中找到给定类的子类?的详细内容。更多信息请关注PHP中文网其他相关文章!