![]() |
1
12
装潢师在他们的位置上是很好的,绝对不能回避——如果合适的话;-)。我认为你的问题本质上是“好的,那么什么时候?” 它们是否合适?
在某些类的某些(但不是全部)方法周围添加一些前缀和/或后缀代码就是一个很好的例子。这都是方法吗
班
这可以归结为编程的黄金法则之一——干巴巴的,因为不要重复你自己。当你看到你的代码变得重复时,你应该重构重复——装饰器是一个很好的工具,尽管它们不是唯一的(辅助方法和函数、自定义元类、生成器和其他迭代器、上下文管理器。。。 许多的 在过去几年我们添加到Python中的特性中,最好将其视为干练的助手,更容易、更流畅地排除这种或那种频繁的重复形式!)。 如果没有重复,就不需要真正的重构,因此(特别是)就不需要真正的装饰器——在这种情况下,YAGNI(你不需要它)可以胜过DRY;-)。 |
![]() |
2
3
Alex已经很好地回答了您的问题,我要添加的是decorators,使您的代码更容易理解。(有时,即使你只做了一次)。 例如,最初,我写我的Django视图,根本不考虑授权。当我写完后,我可以看到哪些需要授权用户,只需为他们输入一个@login\u即可。 因此,任何跟踪我的人都可以一眼看到哪些视图受身份验证保护。 当然,它们更加干燥,到处都是。 如果不是,则请求。用户。是否经过身份验证() 返回HttpResponseRect(..) |
![]() |
3
3
装饰师是一种提升公共空间的方法 方面 Aspect-Oriented Programming 支持者会告诉你,有太多共同的方面,AOP是必不可少的和核心的。事实上,你可以在这里读到关于这个话题的愚蠢辩论: Aspect Oriented Programming vs. Object-Oriented Programming AOP有几个常见的用例。您可以在这里阅读以下内容: Do you use AOP (Aspect Oriented Programming) in production software? 有几个跨领域的关注点,装饰师对此很有帮助。
很少有其他设计模式是真正跨领域的,值得一个AOP装饰。 |
![]() |
4
0
如果在许多函数的开头和结尾都有相同的代码,我认为这可以证明使用装饰器增加了复杂性。 就像为一个有很多页面的网站使用一个很好(但可能很复杂)的模板一样,它确实节省了时间并最终增加了清晰度。 |
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |