Python中方法解析顺序的动态/静态分析

时间:2018-05-22 11:07:35

标签: python-3.x python-mro

有没有一种方法可以在运行时或通过静态分析实际确定给定python类的method resolution order

想象一下,我有一组课程

class A():
    ...

class B(A):
    ...

class C(A):
    ...

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

我想找出它们的C3线性化,而不必通过源代码,并尝试手动确定顺序。我正在开发一个django应用程序,其中的视图有很多混合使用,而这些混合使用时间已经非常随意。我需要确保它们的顺序正确,出于安全考虑,我不想这样做  手工检查我的工作并冒数据泄漏的风险。我也不想手工完成并为每个mixin的调度方法添加打印声明。

2 个答案:

答案 0 :(得分:1)

怎么样?
class A():
    pass

class B(A):
   pass

class C(A):
    pass

class D(B, C):
    def print_mro(self):
         print(self.__class__.__mro__)

d = D()
d.print_mro()

答案 1 :(得分:0)

您也可以做到

d = D()
print(help(d))