Python django中的抽象类和Mixins有什么区别

时间:2012-10-10 00:21:29

标签: python django oop

任何人都可以告诉我们在Django中抽象类和Mixin有什么区别。 我的意思是,如果我们要从基类继承一些方法,为什么有像mixin这样的单独术语,如果它只是一个类。

baseclass和mixins之间的差异是什么

1 个答案:

答案 0 :(得分:6)

在Python(和Django)中, mixin 是一种多重继承。我倾向于想到它们 作为“specilist”类,为类添加特定功能 继承它(以及其他类)。他们并不是真正意义上的立场 他们自己的。

Django的SingleObjectMixin

示例
# views.py
from django.http import HttpResponseForbidden, HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views.generic import View
from django.views.generic.detail import SingleObjectMixin
from books.models import Author

class RecordInterest(View, SingleObjectMixin):
    """Records the current user's interest in an author."""
    model = Author

    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HttpResponseForbidden()

        # Look up the author we're interested in.
        self.object = self.get_object()
        # Actually record interest somehow here!

        return HttpResponseRedirect(reverse('author-detail', kwargs={'pk': self.object.pk}))

添加的SingleObjectMixin可让您只用self.get_objects()查找author


Python中的抽象类看起来像这样:

class Base(object):
    # This is an abstract class

    # This is the method child classes need to implement
    def implement_me(self):
        raise NotImplementedError("told you so!")

在像Java这样的语言中,有一个Interface合同 接口。但是,Python没有这样的最接近的东西 get是一个抽象类(你也可以阅读abc。这主要是因为Python使用了duck typing这种类型消除了对接口的需求。抽象类就像接口一样实现了多态性。