可以使用MRO来覆盖mixin吗?

Cra*_*ium 7 python multiple-inheritance mixins python-3.x

问题描述:我有一个类C从混入继承AB.我想要一个新类,C_具有在类中定义的所有方法/属性,C但在继承方案中BB_(相同的API)交换(一种可能的用法是容易模拟).所有课程都是新式课程.

通过搞乱继承顺序,我得到了我想要的东西,因此MRO:

A   B   B_    B_  A   B
 \ /   /       \   \ /
  C   /         \   C
   \ /           \ /
    C1            C2
C1(C,B_)       C2(B_,C)

C1.__mro__ = (C1, C , A, B, B_, object)
C2.__mro__ = (C2, B_, C, A, B , object)
Run Code Online (Sandbox Code Playgroud)

C2方法(继承之前改性混入C类)工作而不会太大的惊喜和,如果我呼叫在所定义的方法B混入时,B_被选择的定义.

目前它有效,但我觉得:"手指交叉,我希望不会出现特殊情况并破坏系统!"

问题是:它是一种解决问题的最终解决方案,还是有更好的方法?

PS:我想我可以带上我的火箭筒并创建一个元类来重新定义mro(正如官方文档中所述),但我的直觉说它不一定更漂亮.

Ray*_*ger 3

你的方法应该效果很好。使用子类来控制 MRO 并用一个类来影子另一个类是合法的。

这篇博文给出了几个例子: https ://rhettinger.wordpress.com/2011/05/26/super-considered-super/