Cra*_*ium 7 python multiple-inheritance mixins python-3.x
问题描述:我有一个类C从混入继承A和B.我想要一个新类,C_具有在类中定义的所有方法/属性,C但在继承方案中B与B_(相同的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(正如官方文档中所述),但我的直觉说它不一定更漂亮.
你的方法应该效果很好。使用子类来控制 MRO 并用一个类来影子另一个类是合法的。
这篇博文给出了几个例子: https ://rhettinger.wordpress.com/2011/05/26/super-considered-super/