概述:

用于管理和增强函数和类行为的代码

提供一种在函数或类定义中插入自动运行代码的机制

特点  更明确的语法、更高的代码可维护性、更好的一致性

编写

函数基础: 将函数赋给变量、将函数作为参数传递、函数嵌套及跨域访问

函数定义装饰器 通用性更好

 """函数定义装饰器"""
# 通用性更好 # 参数化装饰器
def tags(tag):
def tag_decorator(func):
def wrapper(*args, **kwargs):
return f'<{tag}>{func(*args, **kwargs)}</{tag}>'
return wrapper
return tag_decorator def p_decorator(func):
def wrapper(*args, **kwargs):
return '<p>'+func(*args, **kwargs)+'</p>' return wrapper def div_decorator(func):
def wrapper(*args, **kwargs):
return '<div>{}</div>'.format(func(*args, **kwargs)) return wrapper class Student:
def __init__(self, name):
self.name = name @p_decorator
def get_name(self):
return self.name.upper() @tags('p')
# @p_decorator
def get_text():
return '欢迎学习优品课堂课程' @tags('div')
@tags('p')
# @div_decorator
# @p_decorator
def get_upper_text(text):
return text.upper() if __name__ == '__main__':
print(get_text())
# < p > 欢迎学习优品课堂课程 < / p >
print(get_upper_text('www.codeclassroom.com'))
# < div > < p > WWW.CODECLASSROOM.COM < / p > < / div >
s = Student('Mike')
print(s.get_name())
# < p > MIKE < / p >

类定义装饰器

装饰器参数

 """类定义装饰器"""

 class P:
def __init__(self, func):
self.func = func def __call__(self, *args, **kwargs):
return '<p>' + self.func(*args, **kwargs) + '</p>' class Student:
def __init__(self, name):
self.name = name
# @P 会出现错误
def get_name(self):
return self.name.upper() @P
def get_text():
return '欢迎学习优品课堂课程'
@P
def get_upper_text(text):
return text.upper() if __name__ == '__main__':
print(get_text())
# < p > 欢迎学习优品课堂课程 < / p >
print(get_upper_text('www.codeclassroom.com'))
# < p > WWW.CODECLASSROOM.COM < / p >
s = Student('John')
print(s.get_name())
# JOHN

最新文章

  1. java.sql.SQLException: 关闭的连接
  2. 细说;(function ($, undefined){ })(jQuery); 的使用
  3. Java回调函数
  4. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
  5. 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】
  6. js类(继承)(二)
  7. Java--&gt;简单的斗地主发牌流程
  8. virtualbox安装centos6.5碰到的问题
  9. Struts2国际化文件乱码解决
  10. Jmeter聚合报告分析
  11. C语言中如何获得文件大小
  12. tempo 2.0 学习记录
  13. win7 原版下载&amp;激活
  14. 关于wind7重新安装系统后,连接mysql的问题
  15. .NET中操作IPicture、IPictureDisp
  16. hdu1150 Machine Schedule 经典二分匹配题目
  17. 【效率神奇】Github丧心病狂的9个狠招
  18. Linux之判断字符串是否为空
  19. Minimum setup for Apache+AD SSO
  20. 一个致命的 Redis 命令,导致公司损失 400 万!!

热门文章

  1. 我需要关于fixedFluxPressure边界的解释【翻译】
  2. meshing-球体网格划分
  3. Jenkins 更新 jenkins.war的方法
  4. AOP 与 Spring中AOP使用(上)
  5. Struts2(补充)
  6. mac下如何安装python3?
  7. android中SpannableString之富文本显示效果
  8. @Qualifier is not applicable for constructor
  9. Flask 应用如何部署
  10. (十六)Centos之安装mysql