父 class 可以访问 Python 中其他父 class 的变量吗?
Can parent class access variable of other parent class in Python?
在阅读 Django Unleashed 这本书时,我偶然发现了这段代码。我想知道为什么 NewsLinkGetObjectMixin 可以访问 class 变量 startup_slug_url_kwarg,它是在另一个基础 class 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):
当您从多个基 class 继承一个 class 时,继承的 class 可以访问基 class 的所有属性。
NewsLinkCreate
继承自 NewsLinkGetObjectMixin
和 StartupContextMixin
。因此,当您在 NewsLinkCreate
实例上调用方法 get_object
时,它可以访问来自 NewsLinkGetObjectMixin
和 StartupContextMixin
的变量,因为 NewsLinkCreate
是从 [=23] 继承的=]是的。两个 mixin 的所有属性都添加到 class NewsLinkCreate
.
在阅读 Django Unleashed 这本书时,我偶然发现了这段代码。我想知道为什么 NewsLinkGetObjectMixin 可以访问 class 变量 startup_slug_url_kwarg,它是在另一个基础 class 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):
当您从多个基 class 继承一个 class 时,继承的 class 可以访问基 class 的所有属性。
NewsLinkCreate
继承自 NewsLinkGetObjectMixin
和 StartupContextMixin
。因此,当您在 NewsLinkCreate
实例上调用方法 get_object
时,它可以访问来自 NewsLinkGetObjectMixin
和 StartupContextMixin
的变量,因为 NewsLinkCreate
是从 [=23] 继承的=]是的。两个 mixin 的所有属性都添加到 class NewsLinkCreate
.