Вы можете получить прямой подкласс с помощью метода class.__subclasses__()
[Python-doc] :
>>> Device.__subclasses__()
[<class 'Mobile'>, <class 'Computer'>]
Этооднако возможно, что они также имеют подклассы.Мы можем разработать алгоритм, который каждый раз получает следующее поколение и продолжает делать это до тех пор, пока не будут найдены новые подклассы, такие как:
def get_descendants(klass):
gen = { klass }
desc = set()
while gen:
gen = { skls for kls in gen for skls in kls.__subclasses__() }
desc.update(gen)
return desc
или с переменным числом параметров:
def get_descendants(*klass):
gen = { *klass }
desc = set()
while gen:
gen = { skls for kls in gen for skls in kls.__subclasses__() }
desc.update(gen)
return desc
это вернет set()
, содержащий всех потомков (как прямых, так и косвенных).