Python:使用装饰器v / s mixins?

时间:2015-05-19 06:11:30

标签: python decorator mixins python-decorators

我已经理解了装饰器和mixins的基础知识。装饰器向对象添加新功能而不更改同一类的其他对象实例,而mixin是一种用于从多个父类继承的多重继承。

当您需要修改单个对象实例并在需要全新类对象时使用mixins时,是否意味着应该使用装饰器。或者,还有什么东西可能会让我失踪?什么可以成为现实生活中的用例?

1 个答案:

答案 0 :(得分:16)

在我看来,当你有几个应该具有相同功能的不同类时,你需要mixins。

使用mixins的好例子是Django的基于类的视图。例如,您有几个不同的类:FormView,TemplateView,ListView。他们都有一个类似的功能:他们必须渲染模板。这些类中的每一个都有一个mixin,它添加了模板渲染所需的方法。

另一个例子是你需要为返回JSON结果的API添加一个类。它也可以从基类View类继承。您只需跳过模板mixins,并定义您需要的内容(并可能编写自己的mixin进行JSON编码)。

此外,您可以覆盖mixins中提出的一些方法,这些方法允许您修改本地案例的公共代码的某些部分。这完全是关于OOP,哥们!

长话短说: mixins添加新功能

装饰器用于修改现有功能。例如,如果您需要记录从类中的方法返回的内容。这里正确的选择是装饰器(添加到适当的方法)。

希望它有所帮助。如果没有,请提问。我会更新我的回复。