父类可以在Python中访问其他父类的变量吗?

时间:2017-05-28 03:29:29

标签: python django multiple-inheritance

在阅读Django Unleashed一书时,我遇到了这段代码。我想知道为什么NewsLinkGetObjectMixin可以访问类变量startup_slug_url_kwarg,它是在另一个基类StartupContextMixin中定义的?

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):

1 个答案:

答案 0 :(得分:0)

从几个基类继承一个类时,继承的类可以访问基类的所有属性。

NewsLinkCreate继承自NewsLinkGetObjectMixinStartupContextMixin。因此,当您在get_object实例上调用方法NewsLinkCreate时,它可以访问NewsLinkGetObjectMixinStartupContextMixin中的变量,因为NewsLinkCreate是从这两个类继承的。两个mixin的所有属性都会添加到类NewsLinkCreate

相关问题