首页Django正文

关于类的多重继承和Mixin

提问已结 3 41
lyhabc
lyhabcDjango实战会员2018年8月5日 16:53

类的多重继承和Mixin https://www.cnblogs.com/hiwuchong/p/8531570.htmlhttps://www.cnblogs.com/hiwuchong/p/8531570.html

通过mixin,BasePostsView以及它的子类和PostView具有了CommonMixin类的功能

2个问题 问题1、CommonMixin类是继承哪一个类,因为class CommonMixin(object):是继承object类 问题2、下面两种写法有什么区别 class BasePostsView(CommonMixin,ListView): class BasePostsView(ListView,CommonMixin):

视频里只是一句带过,CommonMixin会mixin进去BasePostsView 第七课-第四节02-升级为Class-based-view

回帖
  • the5fire
    2018年8月5日 19:00
    1. 继承自object;
    2. Mixin一般需要写到第一个位置,用来混入新的属性,或者利用MRO的顺序来做些事。

    可以看看下面这个代码:

    import inspect
    
    
    class Mixin:
        def foo(self, **kwargs):
            print('mixin')
            super().foo()
    
    
    class Base:
        def foo(self, **kwargs):
            print('base')
    
    
    class A(Mixin, Base):
        pass
    
    
    print(inspect.getmro(A))
    
    
    class B(Base, Mixin):
        pass
    
    
    print(inspect.getmro(B))
    
  • the5fire
    2018年8月5日 19:02

    上面的代码需要在Python3下执行,Python2下的代码:

    import inspect
    
    
    class Mixin(object):
        def foo(self, **kwargs):
            print('mixin')
            super().foo()
    
    
    class Base(object):
        def foo(self, **kwargs):
            print('base')
    
    
    class A(Mixin, Base):
        pass
    
    
    print(inspect.getmro(A))
    
    
    class B(Base, Mixin):
        pass
    
    
    print(inspect.getmro(B))
    
  • lyhabc
    lyhabc(楼主)
    2018年8月6日 11:07

    已经解决