装饰器模式

  动态的给原有对象添加一些额外的职责,面向切面编程(AOP),多用于和主业务无关,但又必须的业务,如:登录认证、加锁、权限检查等

Python代码实现示例

  需求点:

    1.在old_func()的输出前面输出Hello,everyone!

    2.在old_func()的输出后面输出Thank you!

  要求:

    1.不能改变原调用方式

    2.要遵循开闭原则,不能修改函数内的代码

# 原有函数
def old_func(name, age):
print("My name is %s,I'm %d years old!" % (name, age)) # 原调用方式
name = "Jet"
age = 18
old_func(name, age)

源代码

def before():
print("Hello,everyone!") def after():
print("Thank you!") def handle_args(before, after):
def handle_func(func):
def new_func(*args, **kwargs):
before()
func(*args, **kwargs)
after()
return new_func
return handle_func @handle_args(before, after) # Python语法糖
def old_func(name, age):
print("My name is %s,I'm %d years old!" % (name, age)) # 原调用方式
name = "Jet"
age = 18
old_func(name, age)

带参数装饰器

def handle_func(func):
def new_func(*args, **kwargs):
print("Hello,everyone!")
func(*args, **kwargs)
print("Thank you!")
return new_func @handle_func
def old_func(name, age):
print("My name is %s,I'm %d years old!" % (name, age)) # 原调用方式
name = "Jet"
age = 18
old_func(name, age)

简单装饰器

最新文章

  1. IDF-CTF-牛刀小试-啥?
  2. Web Essentials之Bundling
  3. WEBAPI 怎么保证安全
  4. SharePoint Foundation 2013 with SP1
  5. bzoj 1030 fail树dp
  6. Matlab学习(一):数字图像处理大作业用到的函数
  7. Linux system V
  8. 关于程序路径Path.Combine以及AppDomain.CurrentDomain.BaseDirectory
  9. iOS常用的加密方式--备用
  10. DBCP|C3P0参数详解
  11. OCA读书笔记(13) - 性能管理
  12. css的寬高約束
  13. java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。
  14. wpgcms---字符串截取
  15. ubantu下git的连接和使用
  16. JavaWeb——tomcat manager 403 Access Denied .You are not authorized to view this page.
  17. 大数据系列之并行计算引擎Spark部署及应用
  18. 笔记六:python字符串运算与函数
  19. 2017-2018-2 《网络对抗技术》 20155322 Exp4 恶意代码分析
  20. 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题

热门文章

  1. Nuxt.js
  2. Chisel3 - model - Hardware Model
  3. Java实现 LeetCode 191 位1的个数
  4. Java实现 计蒜客 拯救行动
  5. IDEA突然无法运行
  6. Java实现 串中取3个不重复字母
  7. uniapp每隔几秒执行一下网络请求(h5端亲测可以,其他端未测试)
  8. Java学习的一般过程
  9. [原创][开源] SunnyUI.Net 更新日志
  10. 链家网 + gevent