9

谁能告诉Django中的抽象类和Mixin有什么区别。我的意思是,如果我们要从基类继承一些方法,为什么会有单独的术语,比如 mixins,如果那只是一个类。

基类和mixins有什么区别

4

1 回答 1

7

在 Python(和 Django)中,mixin是一种多重继承。我倾向于将它们视为“专家”类,它向继承它的类(以及其他类)添加特定功能。他们并不是真的要独立存在。

以 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内容将使您能够author使用 just查找self.get_objects()


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 没有这样的东西,你能得到的最接近的东西是抽象类(你也可以在abc上阅读。这主要是因为 Python 使用了鸭子类型,从而消除了对接口的需求。抽象类支持多态性,就像接口做。

于 2012-10-10T02:03:09.007 回答