zoukankan      html  css  js  c++  java
  • Python 的 Mixin 类(转)

    转1:https://www.cnblogs.com/aademeng/articles/7262520.html

    转2:https://blog.csdn.net/u010377372/article/details/70256043

    转3:https://blog.csdn.net/u012814856/article/details/81355935

    另一个廖雪峰官网:https://www.liaoxuefeng.com/wiki/1016959663602400/1017502939956896

    其实很好理解,就是多重继承,只是不把mixin类看成父类(实际上是父类),而是看成是新增一个功能,用mixin结尾的类名命名是为了区分真正的父类。

    可以参考一下Django的LoginRequiredMixin的实现:

    class LoginRequiredMixin(AccessMixin):
        """Verify that the current user is authenticated."""
        def dispatch(self, request, *args, **kwargs):
            if not request.user.is_authenticated:
                return self.handle_no_permission()
            return super().dispatch(request, *args, **kwargs)

    这个类重写了View类的dispatch方法,当某个类继承LoginRequiredMixin和View时,由于LoginRequiredMixin在View左边,所以当url路由完成,在UserInfoView找dispatch方法时,将优先调用LoginRequiredMixin的dispatch方法

    UserInfoView(LoginRequiredMixin, View):
        pass

    在LoginRequiredMixin的dispatch方法中,先进行认证处理,认证通过,则返回View的dispatch方法(注意上面的super不是指的LoginRequiredMixin的父类,而是UserInfoView的父类),一切照常运行,若认证不通过,则返回handle_no_permission()。其实这相当于实现了一个函数装饰器功能,这可能就是mixin的含义(混入)。

  • 相关阅读:
    单片机编程时易错总结 20181015 项目:3060-A
    UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容
    LDO-AMS1117
    DCDC与LDO
    电容器的ESR
    Class AB与Class D功放
    驻极体麦克风
    音频处理的技术指标
    I2S接口工作原理
    有关功放输入端的探究
  • 原文地址:https://www.cnblogs.com/olivertian/p/10991593.html
Copyright © 2011-2022 走看看