Python-什么是mixin,为什么它们有用?

发布于 2021-02-02 23:21:03

在“ Python编程 ”中,Mark Lutz提到了“ mixins”。我来自C / C ++ / C#背景,以前没有听说过这个词。什么是mixin

在本示例的两行之间进行阅读(我已经链接了它,因为它很长),我认为这是使用多重继承来扩展类而不是“适当的”子类的一种情况。这是正确的吗?

为什么我要这样做而不是将新功能放入子类中?因此,为什么混合/多重继承方法比使用组合更好?

什么将mixin与多重继承分开?这仅仅是语义问题吗?

关注者
0
被浏览
202
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    mixin是一种特殊的多重继承。使用mixin的主要情况有两种:

    1. 你想为一个类提供很多可选功能。
    2. 你想在许多不同的类中使用一种特定功能。
      例如,请考虑werkzeug的请求和响应系统。我可以说一个普通的旧请求对象:
    from werkzeug import BaseRequest
    
    class Request(BaseRequest):
        pass
    

    如果我想添加接受标头支持,我会做到这一点

    from werkzeug import BaseRequest, AcceptMixin
    
    class Request(AcceptMixin, BaseRequest):
        pass
    

    如果我想创建一个支持接受标头,etag,身份验证和用户代理支持的请求对象,则可以这样做:

    from werkzeug import BaseRequest, AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthenticationMixin
    
    class Request(AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthenticationMixin, BaseRequest):
        pass
    

    区别是细微的,但是在上面的示例中,mixin类并不是独立存在的。在更传统的多重继承中,AuthenticationMixin(例如)可能更像Authenticator。也就是说,该类可能会设计为独立存在。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看