Django の Abstract クラスと Mixin の違いを教えてください。つまり、基本クラスからいくつかのメソッドを継承する場合、それが単なるクラスである場合、ミックスインのような別の用語があるのはなぜですか。
ベースクラスとミックスインの違いは何ですか
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
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がダックタイピングを利用するためであり、インターフェイスの必要性がなくなります。抽象クラスは同様にポリモーフィズムを可能にしますインターフェイスはそうします。