my try copying from first answer here :How to find all the subclasses of a class given its name? :
class klass():
pass
class popo(klass):
pass
class pepe(klass):
pass
class P():
def get_all_subclasses(self, cls):
subclass_list = []
def recurse(classe):
for subclass in classe.__subclasses__():
subclass_list.append(subclass)
recurse(subclass)
recurse(cls)
return list(set(subclass_list))
a = P()
print(a.get_all_subclasses(klass),'\n')
print(type(a.get_all_subclasses(klass)),'\n')
class papa(klass):
pass
class coco(popo):
pass
print(a.get_all_subclasses(klass),'\n')
output:
[<class '__main__.popo'>, <class '__main__.pepe'>]
<class 'list'>
[<class '__main__.papa'>, <class '__main__.popo'>, <class '__main__.pepe'>, <class '__main__.coco'>]
or :
class klass:
pass
class popo(klass):
pass
class pepe(klass):
pass
class P:
def __init__(self, classez):
self.list1 = []
self.get_all_subclasses(classez)
pass
def get_all_subclasses(self, cls):
def recurse(classe):
for subclass in classe.__subclasses__():
self.list1.append(subclass)
recurse(subclass) # necessarioo per avere coco nella lista
recurse(cls)
self.list1 = list((self.list1))
return self.list1
a = P(klass)
print(a.list1, "\n")
print(type(a.list1), "\n")
class papa(klass):
pass
class coco(popo):
pass
a = P(klass)
print(a.list1)
I get too:
[<class '__main__.popo'>, <class '__main__.pepe'>]
<class 'list'>
[<class '__main__.popo'>, <class '__main__.coco'>, <class '__main__.pepe'>, <class '__main__.papa'>]
using :
class klass():
pass
class popo(klass):
pass
class pepe(klass):
pass
print(klass.__subclasses__(),'\n')
class papa(klass):
pass
class coco(popo):
pass
print(klass.__subclasses__(),'\n')
I get:
[<class '__main__.popo'>, <class '__main__.pepe'>]
[<class '__main__.popo'>, <class '__main__.pepe'>, <class '__main__.papa'>]