【发布时间】:2010-09-01 03:18:53
【问题描述】:
我已经编写了一个 mixin 类,它被设计为在新样式类之上分层,例如通过
class MixedClass(MixinClass, BaseClass):
pass
将此 mixin 应用于旧式类的最流畅的方法是什么?它在其__init__ 方法中使用对super 的调用,因此这可能(?)必须更改,但否则我想对MixinClass 进行尽可能少的更改。我应该能够派生一个进行必要更改的子类。
我正在考虑在派生自BaseClass 的类之上使用类装饰器,例如
@old_style_mix(MixinOldSchoolRemix)
class MixedWithOldStyleClass(OldStyleClass)
其中MixinOldSchoolRemix 派生自MixinClass,只是重新实现使用super 的方法,以使用包含与其混合的类的类变量,在本例中为OldStyleClass。此类变量将由old_style_mix 设置为混合过程的一部分。
old_style_mix 只会更新例如的类字典。 MixedWithOldStyleClass 与 mixin 类(例如 MixinOldSchoolRemix)字典的内容。
这是一个合理的策略吗?有没有更好的办法?鉴于仍有许多可用模块仍在使用旧式类,这似乎是一个常见问题。
【问题讨论】:
-
我建议将旧样式类转换为新样式类会不会过分?
-
@aaronasterling:如果我可以让它在标准库的所有安装中进行追溯更新,我肯定会这样做。
标签: python inheritance mixins