2017-05-28 6 views
1

Django Unleashedという本を読んだとき、私はこのコードスニペットに出会いました。なぜNewsLinkGetObjectMixinが別の基本クラスStartupContextMixinで定義されているクラス変数startup_slug_url_kwargにアクセスできるのだろうと思っていましたか?Pythonで他の親クラスの親クラスアクセス変数を使用できますか?

class NewsLinkGetObjectMixin(): 

    def get_object(self, queryset=None): 
     startup_slug = self.kwargs.get(
      self.startup_slug_url_kwarg) 
     newslink_slug = self.kwargs.get(
      self.slug_url_kwarg) 
     return get_object_or_404(
      NewsLink, 
      slug__iexact=newslink_slug, 
      startup__slug__iexact=startup_slug) 

class StartupContextMixin(): 
    startup_slug_url_kwarg = 'startup_slug' 
    startup_context_object_name = 'startup' 

    def get_context_data(self, **kwargs): 
     startup_slug = self.kwargs.get(
      self.startup_slug_url_kwarg) 
     startup = get_object_or_404(
      Startup, slug__iexact=startup_slug) 
     context = { 
      self.startup_context_object_name: 
       startup, 
     } 
     context.update(kwargs) 
     return super().get_context_data(**context) 

class NewsLinkCreate(NewsLinkGetObjectMixin, StartupContextMixin, CreateView): 

答えて

0

複数の基本クラスからクラスを継承すると、継承されたクラスは基本クラスのすべての属性にアクセスできます。

NewsLinkCreateは、NewsLinkGetObjectMixinStartupContextMixinの両方から継承されます。したがって、NewsLinkCreateインスタンスでメソッドget_objectを呼び出すと、NewsLinkCreateが両方のクラスから継承されるため、NewsLinkGetObjectMixinStartupContextMixinの両方の変数にアクセスできます。両方のmixinのすべての属性はクラスNewsLinkCreateに追加されます。

関連する問題