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

  • 相关阅读:
    js 点击复制内容
    tp5 日志的用途以及简单使用
    iOS UIKit:TableView之表格创建(1)
    Linux平台的boost安装全解
    iOS UIKit:CollectionView之布局(2)
    iOS UIKit:CollectionView之设计 (1)
    iOS 网络编程:socket
    Objective-C:内存管理
    iOS UIKit:TabBar Controller
    iOS UIKit:Navigation Controllers
  • 原文地址:https://www.cnblogs.com/olivertian/p/10991593.html
Copyright © 2020-2023  润新知