Предположим, что у вас есть базовый класс A, и этот класс переопределяется B и C.
Предположим также, что существует метод класса A.derived()
, который говорит вам, какие классы переопределяют A, поэтому возвращает [B, C], и если вы позже имеете class D(A): pass
или class D(B): pass
, теперь A.derived()
возвращает [B, C, D].
Как бы вы реализовали метод A.derived()
? У меня такое ощущение, что это невозможно, если вы не используете метаклассы. Вы можете пересечь дерево наследования только с дочернего на родительский с помощью стандартного механизма. Чтобы иметь ссылку в другом направлении, вы должны держать ее "вручную", а это означает отмену традиционной механики декларации классов.