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的含义(混入)。

  • 相关阅读:
    收藏文章
    Python __func__
    Python 可变对象 & 不可变对象
    Kafka SASL ACL配置踩坑总结
    C++ 传递动态内存
    负数取反,单目运算“-”的运算
    C++重载运算符的理解
    c++ 随机函数用法
    static变量
    路由汇聚及其相关计算
  • 原文地址:https://www.cnblogs.com/olivertian/p/10991593.html
Copyright © 2011-2022 走看看