Python之装饰器笔记
2024-09-01 14:54:02
概述:
用于管理和增强函数和类行为的代码
提供一种在函数或类定义中插入自动运行代码的机制
特点 更明确的语法、更高的代码可维护性、更好的一致性
编写
函数基础: 将函数赋给变量、将函数作为参数传递、函数嵌套及跨域访问
函数定义装饰器 通用性更好
"""函数定义装饰器"""
# 通用性更好 # 参数化装饰器
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
最新文章
- java.sql.SQLException: 关闭的连接
- 细说;(function ($, undefined){ })(jQuery); 的使用
- Java回调函数
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
- 完美实现跨域Iframe高度自适应【Iframe跨域高度自适应解决方案】
- js类(继承)(二)
- Java-->;简单的斗地主发牌流程
- virtualbox安装centos6.5碰到的问题
- Struts2国际化文件乱码解决
- Jmeter聚合报告分析
- C语言中如何获得文件大小
- tempo 2.0 学习记录
- win7 原版下载&;激活
- 关于wind7重新安装系统后,连接mysql的问题
- .NET中操作IPicture、IPictureDisp
- hdu1150 Machine Schedule 经典二分匹配题目
- 【效率神奇】Github丧心病狂的9个狠招
- Linux之判断字符串是否为空
- Minimum setup for Apache+AD SSO
- 一个致命的 Redis 命令,导致公司损失 400 万!!