在 Programming Python 中,Mark Lutz 提到了 mixin 一词。我来自 C/C++/C# 背景,之前没有听说过这个词。什么是混音?
在 这个例子 的两行之间阅读(我已经链接到它,因为它很长),我假设这是使用多重继承来扩展一个类而不是正确的子类化的情况。这是正确的吗?
为什么我要这样做而不是将新功能放入子类中?就此而言,为什么混合/多重继承方法比使用组合更好?
混合继承与多重继承有什么区别?这只是语义问题吗?
原文由 TarkaDaal 发布,翻译遵循 CC BY-SA 4.0 许可协议
mixin 是一种特殊的多重继承。使用mixin主要有两种情况:
对于第一个示例,请考虑 werkzeug 的请求和响应系统。我可以通过说来制作一个普通的旧请求对象:
如果我想添加接受标头支持,我会这样做
如果我想创建一个支持接受标头、etags、身份验证和用户代理支持的请求对象,我可以这样做:
区别是微妙的,但在上面的例子中,mixin 类并不是独立存在的。在更传统的多重继承中,
AuthenticationMixin
(例如)可能更像Authenticator
。也就是说,该类可能被设计为独立存在。