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

标签 python decorator mixins python-decorators

<分区>

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

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

最佳答案

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

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

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

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

长话短说:mixin 添加新功能

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

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

关于Python:使用装饰器 v/s mixins?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317965/

相关文章:

python - 使用 `statsmodels` 的正常 Q-Q​​ 图中的置信区间

Python:从数据框创建邻接矩阵

python - 如何根据数据框列值将目录中的图像组织成类?

python - 在循环中引入 python 变量的好方法

php - Zend Framework 2 - 表单元素装饰器

angular - 是否可以模拟 typescript 装饰器?

python - 如何在单独的文件中获取函数的函数名称?

less - 合并较少 mixin 输出

c#-4.0 - 与 C# 4.0 的混合

typescript - 我如何在mixin中获取类名?