mixin是一种特殊的多重继承。使用
mixin的主要情况有两种:
- 你想为一个类提供很多可选功能。
- 你想在许多不同的类中使用一种特定功能。
例如,请考虑werkzeug的请求和响应系统。我可以说一个普通的旧请求对象:
from werkzeug import baseRequestclass Request(baseRequest): pass
如果我想添加接受标头支持,我会做到这一点
from werkzeug import baseRequest, AcceptMixinclass Request(AcceptMixin, baseRequest): pass
如果我想创建一个支持接受标头,
etag,身份验证和用户代理支持的请求对象,则可以这样做:
from werkzeug import baseRequest, AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthenticationMixinclass Request(AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthenticationMixin, baseRequest): pass
区别是细微的,但是在上面的示例中,
mixin类并不是独立存在的。在更传统的多重继承中,
AuthenticationMixin(例如)可能更像
Authenticator。也就是说,该类可能会设计为独立存在。



