Python3-设计模式-装饰器模式
2024-08-29 23:10:56
装饰器模式
动态的给原有对象添加一些额外的职责,面向切面编程(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)
简单装饰器
最新文章
- IDF-CTF-牛刀小试-啥?
- Web Essentials之Bundling
- WEBAPI 怎么保证安全
- SharePoint Foundation 2013 with SP1
- bzoj 1030 fail树dp
- Matlab学习(一):数字图像处理大作业用到的函数
- Linux system V
- 关于程序路径Path.Combine以及AppDomain.CurrentDomain.BaseDirectory
- iOS常用的加密方式--备用
- DBCP|C3P0参数详解
- OCA读书笔记(13) - 性能管理
- css的寬高約束
- java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。
- wpgcms---字符串截取
- ubantu下git的连接和使用
- JavaWeb——tomcat manager 403 Access Denied .You are not authorized to view this page.
- 大数据系列之并行计算引擎Spark部署及应用
- 笔记六:python字符串运算与函数
- 2017-2018-2 《网络对抗技术》 20155322 Exp4 恶意代码分析
- 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题