新样式类(即从对象子类化,这是Python 3中的默认类型)有一个__subclasses__方法,它返回子类:
class Foo(object): pass
class Bar(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass
这里是子类的名称:
print([cls.__name__ for cls in vars()['Foo'].__subclasses__()])
# ['Bar', 'Baz']
这里是子类本身:
print(vars()['Foo'].__subclasses__())
# [, ]
确认子类确实列出Foo作为它们的基础:
for cls in vars()['Foo'].__subclasses__():
print(cls.__base__)
#
#
请注意,如果您想要子类别,则必须递归:
def all_subclasses(cls):
return cls.__subclasses__() + [g for s in cls.__subclasses__()
for g in all_subclasses(s)]
print(all_subclasses(vars()['Foo']))
# [, , ]