谁能告诉Django中的抽象类和Mixin有什么区别。我的意思是,如果我们要从基类继承一些方法,为什么会有单独的术语,比如 mixins,如果那只是一个类。
基类和mixins有什么区别
在 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 使用了鸭子类型,从而消除了对接口的需求。抽象类支持多态性,就像接口做。