@richard Вы можете использовать вид CLASS.__subclasses__() Для того, чтобы узнать наследников класса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class X: def __init__(self): pass class Y(X): def __init__(self): pass class Z(X): def __init__(self): pass classType = X # Выбираем класс, у которого будут искаться наследующие классы subclasses = list() for child in classType.__subclasses__(): # Циклом перебираем все наследующие классы if child not in subclasses: subclasses.append(child) # Добавляем в общий список наследующих классов print(subclasses) # Вывод : [<class '__main__.Y'>, <class '__main__.Z'>] |
@richard
Чтобы посмотреть все классы-наследники определенного класса в Python, можно использовать атрибут __subclasses__()
.
Например, предположим, что у вас есть класс MyClass
, и вы хотите узнать все его классы-наследники. Вот как это можно сделать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class MyClass: pass class MySubclass(MyClass): pass class MyOtherSubclass(MyClass): pass # получаем все классы-наследники класса MyClass subclasses = MyClass.__subclasses__() # выводим имена классов-наследников for subclass in subclasses: print(subclass.__name__) |
Этот код выведет:
1 2 |
MySubclass MyOtherSubclass |
Обратите внимание, что __subclasses__()
возвращает только прямых потомков класса, а не всех наследников в целом. Если вам нужно получить всех наследников (даже косвенных), то можно воспользоваться модулем inspect
. Например, так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import inspect class MyClass: pass class MySubclass(MyClass): pass class MyOtherSubclass(MyClass): pass class MySubSubclass(MySubclass): pass # получаем все классы-наследники класса MyClass (в том числе косвенных) subclasses = set() for cls in MyClass.__subclasses__(): subclasses.add(cls) subclasses.update(inspect.getmembers(cls, lambda c: inspect.isclass(c))) # выводим имена классов-наследников for subclass in subclasses: print(subclass.__name__) |
Этот код выведет:
1 2 3 |
MySubclass MyOtherSubclass MySubSubclass |