9

Django の Abstract クラスと Mixin の違いを教えてください。つまり、基本クラスからいくつかのメソッドを継承する場合、それが単なるクラスである場合、ミックスインのような別の用語があるのはなぜですか。

ベースクラスとミックスインの違いは何ですか

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を検索できるようになります。authorself.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 に答える