美文网首页
三、Mixin扩展类 多继承

三、Mixin扩展类 多继承

作者: battleMonkey | 来源:发表于2019-03-23 15:23 被阅读0次

    1. 多继承

    • 首先要清楚: __mro__ 即 继承顺序
    1.1 单继承实现:
    单继承实现

    1.2 多继承实现:

    多继承实现
    • 程序 从 A 开始调用,虽然貌似B 继承了 object 类,但是super(),会按照 __mro__顺序去查找,而在这里 调用发生在A身上,所以__mro__ 属于A,那么,按顺序 B 会从C找 as_view() 方法,而不是 object 。
      要知道 object 身上 是没有 as_view()方法的,少年!

    源码原理(class: view):

    @classonlymethod
        def as_view(cls, **initkwargs):
            """
            Main entry point for a request-response process.
            """
            ...省略代码...
    
            def view(request, *args, **kwargs):
                self = cls(**initkwargs)
                if hasattr(self, 'get') and not hasattr(self, 'head'):
                    self.head = self.get
                self.request = request
                self.args = args
                self.kwargs = kwargs
                # 调用dispatch方法,按照不同请求方式调用不同请求方法
                return self.dispatch(request, *args, **kwargs)
    
            ...省略代码...
    
            # 返回真正的函数视图
            return view
    
    
        def dispatch(self, request, *args, **kwargs):
            # Try to dispatch to the right method; if a method doesn't exist,
            # defer to the error handler. Also defer to the error handler if the
            # request method isn't on the approved list.
            if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed
            return handler(request, *args, **kwargs)
    

    相关文章

      网友评论

          本文标题:三、Mixin扩展类 多继承

          本文链接:https://www.haomeiwen.com/subject/lzjsvqtx.html