Dynamic/static Python 方法解析顺序分析
Dynamic/static analysis of method resolution order in Python
有没有一种方法可以让我在运行时或通过静态分析务实地确定给定 python class 的 method resolution order?
假设我有一组 classes
class A():
...
class B(A):
...
class C(A):
...
class D(B, C):
def print_mro(self):
print("D, B, C, A")
我想找出它们的 C3 线性化,而无需查看源代码并尝试手动确定顺序。我正在开发一个 django 应用程序,其中的视图有很多 mixins,这些 mixins 到目前为止都是相当随意地订购的。我需要确保它们的顺序正确,出于安全原因我不想
手动检查我的工作并冒着数据泄露的风险。我也不想手动通过并为每个 mixin 的 dispatch 方法添加打印语句。
怎么样
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()
?
你也可以-
d = D()
print(help(d))
有没有一种方法可以让我在运行时或通过静态分析务实地确定给定 python class 的 method resolution order?
假设我有一组 classes
class A():
...
class B(A):
...
class C(A):
...
class D(B, C):
def print_mro(self):
print("D, B, C, A")
我想找出它们的 C3 线性化,而无需查看源代码并尝试手动确定顺序。我正在开发一个 django 应用程序,其中的视图有很多 mixins,这些 mixins 到目前为止都是相当随意地订购的。我需要确保它们的顺序正确,出于安全原因我不想 手动检查我的工作并冒着数据泄露的风险。我也不想手动通过并为每个 mixin 的 dispatch 方法添加打印语句。
怎么样
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()
?
你也可以-
d = D()
print(help(d))