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

Python: Use of decorators v/s mixins?

我了解了装饰器和混入的基础知识。装饰器在不改变相同 class 的其他对象实例的情况下向对象添加新功能,而 mixin 是一种多重继承,用于从多个父 class 继承。

这是否意味着当您只需要修改单个对象实例时应该使用装饰器,而当您需要一个全新的 class 对象时应该使用混合。或者,还有什么我可能会遗漏的吗?两者在现实生活中的用例是什么?

在我看来,当您有一些应该具有相同功能的不同 class 时,您需要混入。

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

另一个例子是,如果您需要为 API 添加 class,那么 returns 会得到 JSON 结果。它也可以从基础 View class 继承。您只需跳过模板混入,并定义您需要的内容(并可能为 JSON 编码编写自己的混入)。

此外,您可以覆盖 mixin 中提出的一些方法,这些方法允许您针对本地情况修改公共代码的某些部分。都是关于 OOP 的,伙计!

长话短说:mixins 添加新功能

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

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