我写了一个混合类,它被设计成分层在一个新式类之上,例如通过
class MixedClass(MixinClass, BaseClass):
pass
将此 mixin 应用于旧式类的最流畅的方法是什么?它super
在其__init__
方法中使用了对的调用,因此这可能(?)必须更改,但否则我想对MixinClass
. 我应该能够派生一个进行必要更改的子类。
我正在考虑在派生自的类之上使用类装饰器BaseClass
,例如
@old_style_mix(MixinOldSchoolRemix)
class MixedWithOldStyleClass(OldStyleClass)
whereMixinOldSchoolRemix
派生自MixinClass
并且只是重新实现super
用于代替使用包含与其混合的类的类变量的方法,在这种情况下OldStyleClass
。此类变量将old_style_mix
作为混合过程的一部分设置。
old_style_mix
只会MixedWithOldStyleClass
用 mixin 类 (eg MixinOldSchoolRemix
) 字典的内容更新 eg 的类字典。
这是一个合理的策略吗?有没有更好的办法?鉴于仍有许多可用模块仍在使用旧式类,这似乎是一个常见问题。