Динамический / статический анализ порядка разрешения метода в Python

timthelion спросил: 28 апреля 2018 в 09:27 в: python-3.x

Есть ли способ, которым я могу прагматически определять, во время выполнения или через статический анализ, порядок разрешения метода для данного класса python?

Представьте, что у меня есть набор классов

class A():
    ...class B(A):
    ...class C(A):
    ...class D(B, C):
    def print_mro(self):
         print("D, B, C, A")

Я хочу узнать, что линеаризация C3 для них - это без необходимости запускать исходный код и попытаться определить порядок вручную. Я работаю над django-приложением, где в представлениях есть много миксинов, которые до сих пор были беспорядочно заказаны. Мне нужно убедиться, что они в правильном порядке, но по соображениям безопасности я не хочу проверять свою работу вручную и рисковать утечкой данных. Я также не хочу проходить вручную и добавлять инструкцию печати к каждому методу отправки mixin.

1 ответ

Есть решение
Werner Wenzel ответил: 28 апреля 2018 в 11:33

Как насчет

class A():
    passclass B(A):
   passclass C(A):
    passclass D(B, C):
    def print_mro(self):
         print(self.__class__.__mro__)d = D()
d.print_mro()

?