任何人都可以告诉我们在Django中抽象类和Mixin有什么区别。 我的意思是,如果我们要从基类继承一些方法,为什么有像mixin这样的单独术语,如果它只是一个类。
baseclass和mixins之间的差异是什么
答案 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这种类型消除了对接口的需求。抽象类就像接口一样实现了多态性。