Django Mixins必须从对象

时间:2016-07-01 07:14:59

标签: django

Django的两个骗子,Daniel Roy Greenfeld和Audrey Roy Greenfeld为Django 1.8做的最佳做法。

第10.2段将Mixins与CBW一起使用:

  

Mixins应该继承Python的内置对象类型。

例如:

from django.views.generic import TemplateView
class FreshFruitMixin(object):
    def get_context_data(self, **kwargs):
        context = super(FreshFruitMixin, self).get_context_data(**kwargs)
        context["has_fresh_fruit"] = True
        return context

class FruityFlavorView(FreshFruitMixin, TemplateView):
    template_name = "fruity_flavor.html"

我无法理解这个想法。我们为什么要继承对象?我们不能写这样的东西吗?

class ClassNameMixin:
    <statement-1>

这将是相同的。所以,我无法理解为什么继承对象在这里很重要。

然后,mixin执行某些操作。它能否继承一些富有成效的课程?

1 个答案:

答案 0 :(得分:2)

此注释适用于Python2,其中,如果未指定任何基类,则会创建old-style class,并且MRO和super()将不起作用,这对于多重继承至关重要。

在Python3中,没有旧式类,每个类/类型(间接)都继承自object

我也相信从其他类继承mixins没有任何问题。这只是多重继承,所有规则和陷阱都适用。所以,有问题的评论可以是:

  

Mixins应该(间接)继承Python的内置对象类型。

有时也建议即使在Python3中显式继承object(即不要将基类列表留空),也要使代码与Python2兼容。