Python:使用装饰器v/s mixins? [关闭]

Posted

技术标签:

【中文标题】Python:使用装饰器v/s mixins? [关闭]【英文标题】:Python: Use of decorators v/s mixins? [closed] 【发布时间】:2015-07-30 19:53:49 【问题描述】:

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

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

【问题讨论】:

这是一个很好的问题,我很想知道答案,但不幸的是它将被关闭,因为它不在 *** 的范围内。那是因为它“主要基于意见”——这是结束问题的主要原因。 ***.com/help/search?q=opinion 【参考方案1】:

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

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

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

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

长话短说:mixins 添加了新功能

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

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

【讨论】:

以上是关于Python:使用装饰器v/s mixins? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 ES.later 的装饰器作为 mixin

用户登陆装饰器和页面跳转(包含mixin的使用)

React/Reflux:使用装饰器将带有 mixin 的类转换为 ES6

Python 动态添加类方法

Python进阶装饰器(Decorator)

Python 装饰器和装饰器模式有啥区别?